Maison >développement back-end >Golang >Comment initialiser correctement les structures composées dans 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 }
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}
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!