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
Libérer: 2024-12-14 14:29:15
original
490 Les gens l'ont consulté

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 }
Copier après la connexion

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

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

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
}
Copier après la connexion

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!

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