次の構造体をどのように初期化しますか?
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
Contact
は、匿名の構造体タイプを持つフィールドです。そのため、型定義を繰り返す必要があります。
s := &Sender{
BankCode: "BC",
Name: "NAME",
Contact: struct {
Name string
Phone string
}{
Name: "NAME",
Phone: "PHONE",
},
}
ただし、ほとんどの場合、rob74が提案するように別のタイプを定義する方が適切です。
2つの構造体を別々に定義してから、「送信者」に「連絡先」を埋め込むのはどうですか?
type Sender struct {
BankCode string
Name string
Contact
}
type Contact struct {
Name string
Phone string
}
この方法で行うと、2回目の初期化試行が機能します。さらに、「連絡先」を単独で使用できます。
ネストされた構造体を本当に使用したい場合は、Ainar-Gの答えを使用できますが、このバージョンはきれいではありません(そして、構造体が深くネストされている場合は here )回避できる場合はそうしません。
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",
}