Maison > développement back-end > Golang > Comment initialiser correctement les structures composées dans Go ?

Comment initialiser correctement les structures composées dans Go ?

DDD
Libérer: 2024-12-24 04:26:17
original
417 Les gens l'ont consulté

How to Properly Initialize Composed Structs in Go?

Initialiser des structures composées dans Go

Composer des structures dans Go implique d'incorporer une structure dans une autre. Bien que cette technique offre des avantages en matière d'organisation et de réutilisation du code, elle peut également présenter des problèmes d'initialisation.

Lors de l'initialisation d'une structure composée, il peut s'avérer impossible d'accéder directement aux champs de la structure intégrée. Considérez l'exemple de code suivant :

type Base struct {
    ID string
}

type Child struct {
    Base
    a int
    b int
}

// Error: unknown field 'ID' in struct literal of type Child
// child := Child{ ID: id, a: a, b: b }
Copier après la connexion

Dans cet exemple, la tentative d'initialisation du champ ID directement dans le littéral de la structure Child échoue en raison de l'inaccessibilité du champ. Pour contourner ce problème, il faut d'abord initialiser la structure Child sans ID, puis définir l'ID séparément.

Cependant, cette approche compromet l'encapsulation en exposant la structure interne de la structure Child à ses utilisateurs. Pour éviter cela, Go fournit une méthode pour initialiser les structures composées en toute sécurité : les littéraux composites imbriqués.

Utiliser des littéraux composites imbriqués

Les littéraux composites imbriqués vous permettent d'initialiser les valeurs de structure intégrées. au sein d'une seule expression :

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

Dans cet exemple, la structure Base est initialisée en premier, avec le champ ID défini sur la valeur souhaitée. La structure de base résultante est ensuite utilisée pour initialiser la structure enfant.

Approche alternative

Le numéro Go 9859 propose un changement qui simplifierait l'initialisation des structures intégrées. Ce changement autoriserait l'expression Child{ ID: id, a: a, b: b }, la rendant cohérente avec l'accès aux champs pour les types intégrés.

Considérations sur l'encapsulation

Il est important de noter que les types intégrés ne fournissent pas une véritable encapsulation dans Go. Les applications peuvent toujours accéder directement aux champs de la structure intégrée, en contournant les méthodes de la structure englobante. Par conséquent, considérez attentivement la nécessité de l’encapsulation lors de la conception de vos structures.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal