"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Lors de l'intégration de structures dans Go : pointeurs ou valeurs intégrées ?

Lors de l'intégration de structures dans Go : pointeurs ou valeurs intégrées ?

Publié le 2024-11-15
Parcourir:779

When Embedding Structs in Go: Pointers or Embedded Values?

Intégrer des structures : quand préférer les pointeurs

Lors de l'intégration d'une structure dans une autre, il existe deux options : utiliser un pointeur ou une valeur incorporée . Pour guider cette décision, il est important de comprendre les spécifications et de considérer les avantages de chaque approche.

Pointeurs par rapport aux valeurs intégrées

Selon la spécification Go, un Un champ anonyme (également appelé champ incorporé) peut être déclaré comme nom de type ou comme pointeur vers un nom de type non-interface. Cela signifie que vous avez le choix d'utiliser le type log.Logger ou un pointeur *log.Logger pour le champ Logger dans l'exemple suivant :

type Job struct {
    Command string
    *log.Logger
}

Avantages des pointeurs

L'article "Embedding in Go" d'Eric Urban met en évidence les avantages de l'intégration d'un pointeur, appelé "embed by-pointer ". Ceux-ci incluent :

  • Flexibilité d'initialisation : les fonctions qui utilisent l'idiome NewX renvoient généralement une structure par pointeur, permettant une initialisation facile.
  • Extensibilité dynamique : l'intégration d'un pointeur vous permet de modifier dynamiquement l'instance intégrée au moment de l'exécution sans avoir à instancier la structure. Cela peut être utile pour des scénarios tels que le modèle Flyweight.

Exemple d'intégration de pointeur

type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}

Dans cet exemple, le type Renderer embarque un Bitmap par pointeur. Cela signifie que plusieurs instances de Renderer peuvent partager une seule instance de Bitmap et personnaliser leur comportement indépendamment.

Limites techniques

Il est important de noter que vous ne pouvez pas utiliser de pointeurs vers des pointeurs. ou des pointeurs vers des interfaces sous forme de champs anonymes. Cette restriction vient du fait que ces types n’ont pas de méthodes, ce qui est un aspect clé de l’intégration. Les méthodes sont promues du type incorporé au type incorporé, vous permettant d'y accéder directement.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3