Maison > développement back-end > Golang > Comment puis-je initialiser efficacement les structures intégrées dans Go ?

Comment puis-je initialiser efficacement les structures intégrées dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-17 01:03:24
original
702 Les gens l'ont consulté

How Can I Efficiently Initialize Embedded Structs in Go?

Initialisation de structure avec des structures intégrées dans Go

La composition de structures est une pratique courante dans Go pour l'organisation et la réutilisation du code. Cependant, l'initialisation de structures composées peut présenter un défi lorsqu'un sous-champ est hérité d'une structure intégrée.

Considérons l'exemple suivant :

type Base struct {
    ID string
}

type Child struct {
    Base
    a int
    b int
}
Copier après la connexion

Pour initialiser Child, on pourrait s'attendre à utiliser ce qui suit syntaxe :

child := Child{ ID: id, a: a, b: b }
Copier après la connexion
Copier après la connexion

Cependant, cela entraînera une erreur de compilation en raison de l'ID de champ inconnu dans le littéral de la structure Child. Pour contourner ce problème, le champ ID doit être initialisé séparément :

child := Child{ a: 23, b: 42 }
child.ID = "foo"
Copier après la connexion

Cette approche viole les principes d'encapsulation en exposant le fait que l'ID est un champ intégré. Cela introduit également le risque de rupture de l'initialisation si un champ public est déplacé dans une structure intégrée.

Pour résoudre ce problème, deux solutions sont recommandées :

  1. Littéraux composites imbriqués :

    Les littéraux composites imbriqués peuvent être utilisés pour initialiser un champ incorporé dans un seul expression :

    child := Child{Base: Base{ID: id}, a: a, b: b}
    Copier après la connexion
  2. Modification proposée dans Go :

    Le numéro 9859 de Go propose une modification visant à rendre les littéraux composites cohérents avec l'accès aux champs pour les éléments intégrés genres. S'il est implémenté, ce changement autoriserait la syntaxe suivante :

    child := Child{ ID: id, a: a, b: b }
    Copier après la connexion
    Copier après la connexion

Il est important de noter que les types intégrés ne fournissent pas d'encapsulation au vrai sens du terme. Une application peut toujours accéder directement à child.Base.ID malgré l'utilisation de la syntaxe child.ID.

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