Maison >développement back-end >Golang >L'opérateur de déréférencement de Go crée-t-il une copie ou une référence à la structure d'origine ?
Déréférencement Go : copies ou non, telle est la question
Lors de l'accès à une structure Go à l'aide de l'opérateur de déréférencement (*), les utilisateurs peuvent je me demande si le résultat est une nouvelle copie de la structure ou une référence à l'objet original.
Comprendre le Comportement
Dans l'extrait de code fourni :
type me struct { color string total int } func study() *me { p := me{} return &p } obj := *study()
study() renvoie un pointeur vers une structure me. Le déréférencer dans obj crée une copie de la structure. Cela ressort clairement des adresses mémoire de &p.color et &obj.color, qui sont différentes.
On pourrait s'attendre à ce que la structure obj déréférencée ait la même adresse mémoire que la structure d'origine, mais ce n'est pas le cas dans cette instance. Ce comportement peut être attribué à la désallocation automatique des variables par Go à la fin de leur portée.
Quand il s'agit en fait d'une référence
Pour obtenir un comportement de référence, on peut attribuer un pointeur directement vers la structure en utilisant :
obj := study()
Dans ce cas, obj sera un pointeur vers la structure me d'origine et se transformera en p ou obj affectera la même structure sous-jacente.
Conclusion
Lors du déréférencement d'une structure dans Go, il est important de comprendre que le résultat est une copie de la structure d'origine à moins que un pointeur vers la structure est explicitement attribué. Ce comportement garantit que les modifications apportées à la structure déréférencée n'affectent pas la structure d'origine, conservant ainsi l'encapsulation et l'indépendance des variables.
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!