Structures imbriquées et littéraux d'initialisation de champ
Dans Go, les structures peuvent intégrer d'autres structures, appelées structures imbriquées. Lors de l'initialisation de structures imbriquées avec des valeurs de membre littérales, il est courant de rencontrer un problème où le compilateur signale un champ inconnu dans la structure parent.
Par exemple, considérons le code suivant :
type A struct { MemberA string } type B struct { A MemberB string } b := B { MemberA: "test1", MemberB: "test2", }
Ici, la structure B est définie pour contenir un champ anonyme de type A. Cependant, lorsque vous essayez d'initialiser directement le champ MemberA de la structure A imbriquée, le compilateur renvoie un error :
unknown B field 'MemberA' in struct literal
Cette erreur se produit car lors de l'initialisation, la structure anonyme n'est connue que par son nom de type. Les membres et fonctions associés à la structure anonyme ne sont encore exportés qu'après la création de l'instance.
Pour résoudre ce problème, vous devez fournir une instance valide de la structure anonyme (A dans ce cas) lors de l'initialisation. le champ imbriqué :
b := B { A: A{MemberA: "test1"}, MemberB: "test2", }
En fournissant explicitement une instance de la structure anonyme, vous fournissez au compilateur les informations nécessaires pour accéder au MemberA field.
Le message d'erreur du compilateur "champ B inconnu 'MemberA' dans le littéral de structure" indique que le champ MemberA n'est pas reconnu dans le contexte de la structure B car il appartient à la structure A anonyme.
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!