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 }
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}
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!