Maison > développement back-end > Golang > Pourquoi les setters Go Struct ont-ils besoin de pointeurs pour modifier la structure d'origine ?

Pourquoi les setters Go Struct ont-ils besoin de pointeurs pour modifier la structure d'origine ?

Patricia Arquette
Libérer: 2024-12-16 04:22:12
original
389 Les gens l'ont consulté

Why Do Go Struct Setters Need Pointers to Modify the Original Struct?

Utilisation de setters de structure : comprendre l'importance des pointeurs

Lorsque vous travaillez avec des structures dans Go, l'utilisation de setters peut modifier les propriétés de la structure. Cependant, il peut arriver que les modifications souhaitées ne soient pas reflétées comme prévu. Cela est dû à la manière dont les structures sont transmises aux fonctions.

Dans l'exemple de code fourni :

type T struct { Val string }

func (t T) SetVal(s string) {
    t.Val = s
}

func (t *T) SetVal2(s string) {
    (*t).Val = s
}
Copier après la connexion

La fonction SetVal fournie ne modifie pas la structure d'origine comme prévu car une copie de la structure est passée sous forme de valeur dans la fonction. Les modifications apportées à cette copie n'affectent pas la structure d'origine.

Alternativement, la fonction SetVal2 attend un pointeur vers une structure, lui permettant de modifier la structure d'origine. En effet, Go transmet les pointeurs vers les structures par valeur, ce qui signifie que la fonction reçoit une référence au même emplacement mémoire que la structure d'origine.

Pour démontrer ce comportement, considérez le code suivant :

v := T{"abc"}
fmt.Println(v)        // {abc}
v.SetVal("pdq")
fmt.Println(v)        // {abc}
v.SetVal2("xyz")
fmt.Println(v)        // {xyz}
Copier après la connexion

Dans cet exemple, la structure v d'origine n'est pas modifiée par SetVal, mais elle est modifiée par SetVal2. Cela est évident par la différence de sortie.

Le point clé à retenir est que dans Go, lorsque vous utilisez des setters pour des structures, il est important de comprendre la différence entre le passage par valeur et le passage par pointeur. L'utilisation de pointeurs permet aux fonctions de modifier la structure d'origine, tandis que le passage par valeur crée une copie de la structure dans la fonction.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal