Maison > développement back-end > Golang > Comment puis-je initialiser correctement les structures composées dans Go tout en conservant l'encapsulation ?

Comment puis-je initialiser correctement les structures composées dans Go tout en conservant l'encapsulation ?

Patricia Arquette
Libérer: 2024-12-24 02:04:10
original
775 Les gens l'ont consulté

How Can I Properly Initialize Composed Structs in Go While Maintaining Encapsulation?

Considérations sur l'encapsulation pour l'initialisation de structures composées dans Go

Dans Go, lorsqu'il s'agit de structures contenant des structures intégrées, l'initialisation peut poser des problèmes en raison de problèmes d’encapsulation. Prenons l'exemple suivant :

type Base struct {
    ID string
}

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

Lorsque nous essayons d'initialiser une structure Child à l'aide d'un littéral de structure, nous rencontrons une erreur :

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

C'est parce que le champ ID est hérité du structure de base intégrée et n'est pas directement accessible via la structure enfant.

Pour résoudre ce problème tout en conservant l'encapsulation, nous pouvons utiliser un composite imbriqué littéraux :

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

Cette approche consiste à créer une instance anonyme de la structure Base dans le littéral composite de la structure Enfant et à initialiser explicitement son champ ID.

Une autre solution proposée consiste à modifier le langage Go en permettre un accès direct aux champs pour les types intégrés. Cependant, il est important de noter que les types incorporés ne fournissent pas une encapsulation complète, car un accès direct aux champs incorporés est toujours possible :

child.Base.ID // Example of direct access
Copier après la connexion

En conclusion, même si les littéraux composites imbriqués offrent une solution viable pour initialiser les structures incorporées de manière structurée, il est crucial de comprendre les limites de l'encapsulation pour les types embarqués dans Go.

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