program tip

구조체 메서드에서 필드를 설정하고 가져 오는 방법

radiobox 2021. 1. 10. 17:04
반응형

구조체 메서드에서 필드를 설정하고 가져 오는 방법


다음과 같은 구조체를 만든 후 :

type Foo struct {
   name string        

}
func (f Foo) SetName(name string){
    f.name=name
}

func (f Foo) GetName string (){
   return f.name
}

Foo의 새 인스턴스를 만들고 이름을 설정하고 얻으려면 어떻게해야합니까? 다음을 시도했습니다.

p:=new(Foo)
p.SetName("Abc")
name:=p.GetName()
fmt.Println(name)

이름이 비어 있기 때문에 아무것도 인쇄되지 않습니다. 그렇다면 구조체 내부에 필드를 설정하고 가져 오는 방법은 무엇입니까?


해설 (및 작동) 예 :

package main

import "fmt"

type Foo struct {
    name string
}

// SetName receives a pointer to Foo so it can modify it.
func (f *Foo) SetName(name string) {
    f.name = name
}

// Name receives a copy of Foo since it doesn't need to modify it.
func (f Foo) Name() string {
    return f.name
}

func main() {
    // Notice the Foo{}. The new(Foo) was just a syntactic sugar for &Foo{}
    // and we don't need a pointer to the Foo, so I replaced it.
    // Not relevant to the problem, though.
    p := Foo{}
    p.SetName("Abc")
    name := p.Name()
    fmt.Println(name)
}

그것을 테스트 하고 받아 이동의 투어 방법과 포인터, 모두에서 이동의 기초에 대해 더 배우고.


세터와 게터가 아닌 이동에 관용적. 특히 필드 x에 대한 getter는 GetX가 아니라 X로 명명됩니다. http://golang.org/doc/effective_go.html#Getters 참조

If the setter does not provide special logic, e.g. validation logic, there is nothing wrong with exporting the field and neither providing a setter nor a getter method. (This just feels wrong for someone with a Java background. But it is not.)


For example,

package main

import "fmt"

type Foo struct {
    name string
}

func (f *Foo) SetName(name string) {
    f.name = name
}

func (f *Foo) Name() string {
    return f.name
}

func main() {
    p := new(Foo)
    p.SetName("Abc")
    name := p.Name()
    fmt.Println(name)
}

Output:

Abc

ReferenceURL : https://stackoverflow.com/questions/11810218/how-to-set-and-get-fields-in-structs-method

반응형