Maison >développement back-end >Golang >Comment initialiser correctement les structures imbriquées dans Go à l'aide de littéraux ?

Comment initialiser correctement les structures imbriquées dans Go à l'aide de littéraux ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 10:34:25471parcourir

How to Correctly Initialize Nested Structures in Go Using Literals?

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!

Déclaration:
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