Comment initialisez-vous la structure suivante?
type Sender struct {
BankCode string
Name string
Contact struct {
Name string
Phone string
}
}
j'ai essayé:
s := &Sender{
BankCode: "BC",
Name: "NAME",
Contact {
Name: "NAME",
Phone: "PHONE",
},
}
n'a pas fonctionné:
mixture of field:value and value initializers
undefined: Contact
j'ai essayé:
s := &Sender{
BankCode: "BC",
Name: "NAME",
Contact: Contact {
Name: "NAME",
Phone: "PHONE",
},
}
n'a pas fonctionné:
undefined: Contact
Votre Contact
est un champ de type struct anonyme. En tant que tel, vous devez répéter la définition de type:
s := &Sender{
BankCode: "BC",
Name: "NAME",
Contact: struct {
Name string
Phone string
}{
Name: "NAME",
Phone: "PHONE",
},
}
Mais dans la plupart des cas, il est préférable de définir un type distinct comme le propose rob74.
Que diriez-vous de définir les deux structures séparément, puis d'incorporer "Contact" dans "Expéditeur"?
type Sender struct {
BankCode string
Name string
Contact
}
type Contact struct {
Name string
Phone string
}
si vous le faites de cette façon, votre deuxième tentative d'initialisation fonctionnera. De plus, vous pouvez utiliser "Contact" seul.
Si vous voulez vraiment utiliser la structure imbriquée, vous pouvez utiliser la réponse d'Ainar-G, mais cette version n'est pas jolie (et elle devient encore plus laide si les structures sont profondément imbriquées, comme indiqué ici ), donc je ne ferais pas ça si ça peut être évité.
type NameType struct {
First string
Last string
}
type UserType struct {
NameType
Username string
}
user := UserType{NameType{"Eduardo", "Nunes"}, "esnunes"}
// or
user := UserType{
NameType: NameType{
First: "Eduardo",
Last: "Nunes",
},
Username: "esnunes",
}