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
DDDoriginal
2024-11-28 20:54:12135parcourir

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
}

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

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

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:
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