如何初始化以下结构?
type Sender struct {
BankCode string
Name string
Contact struct {
Name string
Phone string
}
}
我试过了:
s := &Sender{
BankCode: "BC",
Name: "NAME",
Contact {
Name: "NAME",
Phone: "PHONE",
},
}
无效:
mixture of field:value and value initializers
undefined: Contact
我试过了:
s := &Sender{
BankCode: "BC",
Name: "NAME",
Contact: Contact {
Name: "NAME",
Phone: "PHONE",
},
}
无效:
undefined: Contact
答案 0 :(得分:54)
您的Contact
是一个具有匿名结构类型的字段。因此,您必须重复类型定义:
s := &Sender{
BankCode: "BC",
Name: "NAME",
Contact: struct {
Name string
Phone string
}{
Name: "NAME",
Phone: "PHONE",
},
}
但在大多数情况下,最好将rob74定义为单独的类型。
答案 1 :(得分:30)
如何单独定义两个结构,然后在“发件人”中嵌入“联系人”?
type Sender struct {
BankCode string
Name string
Contact
}
type Contact struct {
Name string
Phone string
}
如果你这样做,你的第二次初始化尝试将起作用。此外,您可以单独使用“联系人”。
如果你真的想使用嵌套结构,你可以使用Ainar-G的答案,但是这个版本并不漂亮(如果结构深度嵌套,它会变得更加丑陋,如图here所示),所以如果可以避免,我就不会这样做。
答案 2 :(得分:3)
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",
}