Disons que j'ai une structure avec une autre structure incorporée dans celle-ci.
type Base struct {
ID string
}
type Child struct {
Base
a int
b int
}
Quand je vais initialiser Child
je ne peux pas initialiser le ID
directement sur le terrain.
// unknown field 'ID' in struct literal of type Child
child := Child{ ID: id, a: a, b: b }
Je dois plutôt initialiser le champ ID séparément.
child := Child{ a: 23, b: 42 }
child.ID = "foo"
Cela semble violer l'encapsulation. L'utilisateur de Child doit savoir qu'il y a quelque chose de différent dans le champ ID. Si, par la suite, je déplaçais un champ public dans une structure intégrée, cela pourrait rompre l'initialisation.
Je pourrais écrire un NewFoo()
pour chaque structure et espérer que tout le monde l'utilise, mais Existe-t-il un moyen d'utiliser le littéral struct en toute sécurité avec des structs intégrés qui ne révèle pas que certains des champs sont intégrés ? Ou est-ce que j'applique le mauvais modèle ici ?