comment définir et obtenir des champs dans les structures Golang?

Après avoir créé une structure comme celle-ci:

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

Comment créer une nouvelle instance de Foo et définir et obtenir le nom? J’ai essayé ce qui suit:

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

Rien ne s’imprime, car le nom est vide. Alors, comment définir et obtenir un champ dans une structure?

Exemple de commentaire (et de travail):

 package main import "fmt" type Foo struct { name ssortingng } // SetName receives a pointer to Foo so it can modify it. func (f *Foo) SetName(name ssortingng) { f.name = name } // Name receives a copy of Foo since it doesn't need to modify it. func (f Foo) Name() ssortingng { 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) } 

Testez-le et prenez A Tour of Go pour en savoir plus sur les méthodes et les pointeurs, ainsi que sur les bases de Go.

Les Setters et les Getters ne sont pas si idiomatiques à Go. Surtout le getter pour un champ x n’est pas nommé mais seulement X. Voir http://golang.org/doc/effective_go.html#Getters

Si le codeur ne fournit pas de logique spéciale, par exemple une logique de validation, il n’ya rien de mal à exporter le champ et à ne pas fournir de méthode de réglage ni de méthode de lecture. (Cela se sent juste mal pour quelqu’un avec un arrière-plan Java. Mais ce n’est pas le cas.)

Par exemple,

 package main import "fmt" type Foo struct { name ssortingng } func (f *Foo) SetName(name ssortingng) { f.name = name } func (f *Foo) Name() ssortingng { return f.name } func main() { p := new(Foo) p.SetName("Abc") name := p.Name() fmt.Println(name) } 

Sortie:

 Abc