Maison >développement back-end >Golang >Intégrer une Struct ou un pointeur vers une Struct dans Go : quand choisir quoi ?

Intégrer une Struct ou un pointeur vers une Struct dans Go : quand choisir quoi ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 06:06:03509parcourir

 Embed a Struct or a Pointer to a Struct in Go: When Should You Choose What?

Intégrer une structure par rapport à un pointeur vers une structure dans une structure utilisée comme pointeur

Dans Go, il est souvent nécessaire de référencer une structure en tant que pointeur, en particulier lorsque vous travaillez avec des objets orientés objet. motifs. Cependant, lors de l'intégration d'une structure dans une autre structure utilisée comme pointeur, vous avez un choix à faire : intégrer la structure elle-même ou un pointeur vers celle-ci. Cette décision a des implications subtiles qui peuvent affecter le comportement du code.

Intégrer la structure

Considérez le code suivant :

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

type A struct {
    B
}</code>

Ici, la structure B est intégrée directement dans le Une structure. La valeur nulle de A inclut un objet incorporé de type B, qui a également sa valeur nulle. En conséquence, nous pouvons appeler en toute sécurité la méthode Print de l'objet B incorporé :

<code class="go">var a A
a.Print() // prints 0</code>

Intégrer le pointeur vers la structure

En revanche, considérons le code suivant :

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

type A struct {
    *B
}</code>

Ici, la structure B est intégrée en tant que pointeur dans la structure A. La valeur zéro de A a une valeur de pointeur nulle pour le *B incorporé. Tenter d'appeler la méthode Print sur l'objet *B intégré entraînera une panique :

<code class="go">var a A
a.Print() // panics</code>

Copie des différences

Lors de la création de nouveaux objets de ces types, le comportement diffère :

  • Pour les objets A, une copie de l'objet B intégré est créée, ce qui signifie que toute modification apportée au champ intégré n'affectera pas l'objet d'origine.
  • Pour les objets A avec des pointeurs intégrés, une copie du pointeur *B est créé, ce qui signifie que toute modification apportée à l'objet B sous-jacent affectera à la fois l'objet d'origine et toutes les copies partageant le même pointeur.

Conclusion

Le choix entre l'intégration directe de la structure ou l'utilisation d'un pointeur dépend du cas d'utilisation prévu. L'intégration de la structure offre la commodité d'accéder directement aux champs intégrés, tandis que l'intégration d'un pointeur permet de modifier la structure intégrée pour affecter plusieurs copies. Comprendre ces implications garantit une utilisation correcte et évite les pièges potentiels dans votre code.

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