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!