반응형
구조체 메서드에서 필드를 설정하고 가져 오는 방법
다음과 같은 구조체를 만든 후 :
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
반응형
'program tip' 카테고리의 다른 글
MYSQL은 두 열에서 DISTINCT 값을 선택합니다. (0) | 2021.01.10 |
---|---|
Fold 및 foldLeft 메서드 차이 (0) | 2021.01.10 |
IOS의 원형 진행률 표시 줄 (0) | 2021.01.10 |
MySQL은 now () (시간이 아닌 날짜 만)를 datetime 필드와 비교합니다. (0) | 2021.01.10 |
MySQL의 한 데이터베이스에서 다른 데이터베이스로 테이블 이동 (0) | 2021.01.10 |