Maison > développement back-end > Golang > Go Structs : copie de valeur ou référence lors du déréférencement d'un pointeur ?

Go Structs : copie de valeur ou référence lors du déréférencement d'un pointeur ?

DDD
Libérer: 2024-11-28 20:54:12
original
241 Les gens l'ont consulté

Go Structs:  Value Copy or Reference When Dereferencing a Pointer?

Déréférencement de structure : comprendre la copie de valeur par rapport à l'affectation de référence

Lorsque vous travaillez avec des structures dans Go, l'opérateur astérisque (*) peut être utilisé pour déréférencer un pointeur de structure, soulevant des questions quant à savoir s'il renvoie la même valeur de structure ou une nouvelle copie. Précisons cela à travers un exemple :

Considérons le code suivant :

type me struct {
    color string
    total int
}

func study() *me {
    p := me{}
    p.color = "tomato"
    return &p
}
Copier après la connexion

Dans ce cas, la fonction study() renvoie un pointeur vers une structure me. Lorsque nous appelons Study() dans la fonction principale et que nous l'attribuons à p, nous stockons essentiellement une référence à la structure me d'origine. Cependant, lorsque nous déréférencessons p en utilisant obj := *p, nous copions la valeur de la structure pointée par p. Cela équivaut à :

var obj me = *p
Copier après la connexion

En conséquence, obj devient une nouvelle variable de type me, initialisée avec les mêmes données que la struct pointée par p. Cela signifie que obj et p ont des adresses mémoire distinctes, même s'ils contiennent les mêmes données.

Il est important de noter que si nous apportons des modifications à la structure obj, elles n'affecteront pas les données pointées par p. , sauf si la structure me contient des types de référence (tels que des tranches, des cartes ou des canaux). Dans de tels cas, les modifications apportées à ces champs seront reflétées à la fois dans obj et dans la structure pointée par p.

Cependant, si nous voulons attribuer une référence à la même structure que p, au lieu de copier sa valeur, nous pouvons utiliser une affectation directe :

obj := p
Copier après la connexion

Dans ce cas, obj contiendra une référence directe à la même structure que p, et toutes les modifications apportées à obj seront également visibles via p.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal