Maison >développement back-end >Golang >Comment les créateurs de structure de Go gèrent-ils le passage par valeur par rapport au passage par référence ?

Comment les créateurs de structure de Go gèrent-ils le passage par valeur par rapport au passage par référence ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-14 14:29:15492parcourir

How Do Go's Struct Setters Handle Pass-by-Value vs. Pass-by-Reference?

Comprendre les setters de structure dans Go

Dans Go, les structures peuvent être transmises aux fonctions par référence ou par valeur. Lorsqu'elle est passée par référence, la fonction peut modifier la structure d'origine. Cependant, passer une structure par valeur entraîne la création d'une nouvelle copie de la structure au sein de la fonction, et toute modification apportée à cette copie n'altèrera pas la structure d'origine.

Dans l'exemple de code fourni :

type T struct { Val string }

La structure T contient un seul champ de chaîne nommé Val.

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

La méthode SetVal reçoit une structure par valeur et tente de modifier son Val champ. Cependant, cela ne fonctionne pas comme prévu car la fonction opère sur une copie de la struct.

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

La méthode SetVal2, quant à elle, reçoit un pointeur vers une struct et peut donc modifier l'original structurer. En effet, Go vérifie dynamiquement le type des pointeurs, permettant à la fonction d'accéder à la structure sous-jacente et de modifier ses champs directement.

En résumé, il est essentiel de comprendre que les structures passées par valeur créent une nouvelle copie, empêchant toute les modifications apportées au sein de la fonction n’affectent pas la structure d’origine. Pour modifier la structure d'origine depuis une fonction, elle doit être passée par référence, à l'aide d'un pointeur.

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