Maison >développement back-end >Golang >Comment les récepteurs de pointeurs dans Go impactent-ils la modification de la structure au sein des fonctions ?
Modification des valeurs des champs de structure
Dans Go, lorsqu'une fonction reçoit une structure, elle reçoit généralement une copie de l'objet d'origine. Ainsi, toute modification apportée à la structure au sein de cette fonction n'affectera pas l'objet d'origine.
Considérez l'exemple suivant, où nous définissons une structure Point avec deux champs, x et dx. La méthode Move incrémente x de dx et la méthode Print imprime la valeur de x.
type Point struct { x, dx int } func (s Point) Move() { s.x += s.dx log.Printf("New X=%d", s.x) } func (s Point) Print() { log.Printf("Final X=%d", s.x) } func main() { st := Point{ 3, 2 }; st.Move() st.Print() }
Dans ce code, les méthodes Move et Print sont attachées à la structure Point en tant que récepteurs de valeur. Cela signifie que lorsque st est transmis à ces méthodes, une copie de l'objet st original est créée. Toute modification apportée à la copie dans ces méthodes n'affectera pas l'objet st d'origine.
Par conséquent, lorsque nous appelons st.Move(), la copie de st est modifiée, mais l'objet st d'origine reste inchangé. . Par conséquent, lorsque nous imprimons st dans st.Print(), nous voyons toujours la valeur originale de x.
Pour résoudre ce problème, nous devons modifier les méthodes Move et Print pour utiliser des récepteurs de pointeurs au lieu de récepteurs de valeurs. Cela garantit que toute modification apportée à la structure au sein de ces méthodes affectera l'objet d'origine.
type Point struct { x, dx int } func (s *Point) Move() { s.x += s.dx log.Printf("New X=%d", s.x) } func (s *Point) Print() { log.Printf("Final X=%d", s.x) } func main() { st := Point{ 3, 2 }; st.Move() st.Print() }
En utilisant des récepteurs de pointeurs, nous obtenons maintenant le résultat attendu :
2014/07/28 15:49:44 New X=5 2014/07/28 15:49:44 Final X=5
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!