Comment puis-je faire ceci:
type A struct {
MemberA string
}
type B struct {
A
MemberB string
}
...
b := B {
MemberA: "test1",
MemberB: "test2",
}
fmt.Printf("%+v\n", b)
Compilation qui me donne: "champ B inconnu 'MemberA' dans la structure littérale"
Comment puis-je initialiser MemberA (à partir de la structure "parent") lorsque je fournis des valeurs littérales de membre struct comme celle-ci?
Pendant l'initialisation, la structure anonyme n'est connue que sous son nom de type (dans votre cas A
). Les membres et les fonctions associés à la structure ne sont exportés vers l'extérieur qu'après que l'instance existe.
Vous devez fournir une instance valide de A
pour initialiser MemberA
:
b := B {
A: A{MemberA: "test1"},
MemberB: "test2",
}
L'erreur du compilateur
champ B inconnu "MemberA" dans le littéral struct
dit exactement cela: il n'y a pas de MemberA
car il est toujours dans A
et pas dans B
. En fait, B
n'aura jamais MemberA
, il restera toujours dans A
. Pouvoir accéder à MemberA
sur une instance de B
n'est que du sucre syntaxique.