Maison >développement back-end >Golang >Comment puis-je initialiser efficacement des structures intégrées dans Go à l'aide de littéraux composites ?

Comment puis-je initialiser efficacement des structures intégrées dans Go à l'aide de littéraux composites ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 16:15:14574parcourir

How Can I Efficiently Initialize Embedded Structs in Go Using Composite Literals?

Utilisation de littéraux composites imbriqués pour initialiser des structures composées

Dans Go, l'initialisation d'une structure composée peut être délicate lors de l'intégration d'autres structures. La syntaxe originale de child := Child{ ID: id, a: a, b: b } peut entraîner une erreur en raison de l'impossibilité d'initialiser directement l'ID de champ intégré.

Pour surmonter ce problème et maintenir encapsulation, utilisez des littéraux composites imbriqués :

child := Child{
    Base: Base{ID: id}, // Initialize the embedded struct
    a: a,
    b: b,
}

Cette approche permet d'initialiser la structure composée dans une seule expression tout en préservant l'encapsulation en imbriquant la structure intégrée initialisation.

Une autre solution, comme indiqué dans la question, consiste à utiliser des méthodes d'usine comme NewFoo(). Cependant, les littéraux composites imbriqués offrent une alternative plus concise et sûre.

Modification proposée dans les littéraux composites

Le numéro Go 9859 propose une modification de la syntaxe des littéraux composites pour prendre en charge initialiser directement les champs intégrés. Ce changement permettrait d'activer la syntaxe originale de child := Child{ ID: id, a: a, b: b }.

Considérations sur l'encapsulation

L'intégration de structures n'est pas une fonctionnalité d'encapsulation stricte dans Go. Bien qu'il autorise un accès indirect aux champs intégrés, il ne l'applique pas. Le code peut toujours accéder directement à child.Base.ID en plus d'utiliser child.ID. Ainsi, la responsabilité de l'encapsulation incombe en fin de compte à la conception et à l'utilisation de l'application.

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