Инициализировать определение вложенной структуры в Голанге
Как вы инициализируете следующую структуру?
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
Ответы
Ответ 1
Ваш 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
}
если вы это сделаете, ваша вторая попытка инициализации будет работать. Кроме того, вы можете использовать "Контакт" самостоятельно.
Если вы действительно хотите использовать вложенную структуру, вы можете использовать ответ Ainar-G, но эта версия не очень хороша (и она становится еще более уродливой, если структуры глубоко вложены, как показано здесь), поэтому я бы этого не сделал, если его можно избежать.
Ответ 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",
}