Inicializar definição de estrutura aninhada em Golang

Como você inicializa a seguinte estrutura?

type Sender struct { BankCode string Name string Contact struct { Name string Phone string } } 

Eu tentei:

 s := &Sender{ BankCode: "BC", Name: "NAME", Contact { Name: "NAME", Phone: "PHONE", }, } 

Não funcionou:

 mixture of field:value and value initializers undefined: Contact 

Eu tentei:

 s := &Sender{ BankCode: "BC", Name: "NAME", Contact: Contact { Name: "NAME", Phone: "PHONE", }, } 

Não funcionou:

 undefined: Contact 

Seu Contact é um campo com tipo de estrutura anônima. Assim, você precisa repetir a definição de tipo:

 s := &Sender{ BankCode: "BC", Name: "NAME", Contact: struct { Name string Phone string }{ Name: "NAME", Phone: "PHONE", }, } 

Mas na maioria dos casos é melhor definir um tipo separado como rob74 proposto.

Que tal definir as duas estruturas separadamente e depois incorporar “Contact” em “Sender”?

 type Sender struct { BankCode string Name string Contact } type Contact struct { Name string Phone string } 

Se você fizer dessa maneira, sua segunda tentativa de boot funcionará. Além disso, você pode usar “Contato” por conta própria.

Se você realmente quer usar a estrutura aninhada, você pode usar a resposta do Ainar-G, mas esta versão não é bonita (e fica ainda mais feia se os structs estiverem profundamente nesteds, como mostrado aqui ), então eu não faria isso se puder ser evitado.

 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", }