如何设置和获取Golang结构中的字段?

在创build这样的结构之后:

type Foo struct { name string } func (f Foo) SetName(name string){ f.name=name } func (f Foo) GetName string (){ return f.name } 

如何创buildFoo的新实例并设置名称? 我尝试了以下内容:

 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) } 

testing它,并采取一个Go的旅游了解更多的方法和指针,以及所有的基本知识。

安装者和获取者并不是Go的惯用语。 特别是字段x的getter不是GetX而是X.请参阅http://golang.org/doc/effective_go.html#Getters

如果setter不提供特殊的逻辑,比如validation逻辑,那么导出这个字段没有任何问题,既不提供setter也不提供getter方法。 (对于有Java背景的人来说,这只是错误的,但事实并非如此)。

例如,

 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) } 

输出:

 Abc