Maison > développement back-end > Golang > Structures intégrées dans Go : quand intégrer par valeur ou par pointeur ?

Structures intégrées dans Go : quand intégrer par valeur ou par pointeur ?

Mary-Kate Olsen
Libérer: 2024-11-02 19:34:30
original
1072 Les gens l'ont consulté

Embedded Structs in Go: When to Embed by Value vs. by Pointer?

Structs intégrés dans Go : pointeur contre objet

Lorsque vous traitez des récepteurs de pointeurs et construisez des types de pointeurs, comprendre la différence entre l'intégration d'une structure car un objet (B) par rapport à un pointeur (*B) devient crucial. Dans ce contexte, les valeurs zéro de ces deux types de structures intégrées diffèrent considérablement.

Incorporation directe (objet)

Si une structure B avec des récepteurs de pointeurs est intégrée directement comme un objet dans une structure A, sa valeur zéro inclut un objet incorporé de type B, qui a lui-même une valeur zéro. Les développeurs peuvent accéder en toute sécurité à cet objet intégré et à ses méthodes.

<code class="go">type B struct {
    X int
}

func (b *B) Print() { fmt.Printf("%d\n", b.X) }

type AObj struct {
    B
}

var aObj AObj
aObj.Print() // prints 0</code>
Copier après la connexion

Incorporation de pointeur

En revanche, l'intégration d'un pointeur vers B (*B) crée un scénario différent . La valeur zéro de cette structure intégrée a une valeur de pointeur nulle, la rendant directement inutilisable.

<code class="go">type APtr struct {
    *B
}

var aPtr APtr
aPtr.Print() // panics</code>
Copier après la connexion

Copie d'objet

Lorsqu'un objet AObj est créé, il obtient une copie de l'objet B incorporé. Les modifications apportées à la copie n'affectent pas l'objet d'origine.

<code class="go">aObj2 := aObj
aObj.X = 1
aObj2.Print() // prints 0</code>
Copier après la connexion

Copie du pointeur

Avec APtr, la création d'un nouvel objet copie le pointeur (*B) mais pas l'objet concret sous-jacent pointé. Par conséquent, les modifications apportées au nouvel objet affectent à la fois les objets d'origine et les nouveaux.

<code class="go">aPtr.B = &B{}
aPtr2 := aPtr
aPtr.X = 1
aPtr2.Print() // prints 1</code>
Copier après la connexion

Il est important de prendre en compte le cas d'utilisation et les exigences spécifiques lors de la détermination de l'intégration d'une structure en tant qu'objet ou pointeur. Cette décision peut avoir un impact sur l'initialisation nulle, le comportement de copie et la propriété des objets, entre autres facteurs.

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