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 ?

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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-28 12:29:10278parcourir

Does Go's Dereference Operator Create a Copy or a Reference to the Original Struct?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn