Inicializar una estructura anidada en Golang

No puedo descifrar cómo inicializar una estructura anidada. Encuentre un ejemplo aquí: http://play.golang.org/p/NL6VXdHrjh

package main type Configuration struct { Val string Proxy struct { Address string Port string } } func main() { c := &Configuration{ Val: "test", Proxy: { Address: "addr", Port: "80", }, } } 

Bueno, ¿alguna razón específica para no hacer Proxy su propia estructura?

De todos modos tienes 2 opciones:

La forma correcta, simplemente mueva el proxy a su propia estructura, por ejemplo:

 type Configuration struct { Val string Proxy } type Proxy struct { Address string Port string } func main() { c := &Configuration{ Val: "test", Proxy: Proxy{ Address: "addr", Port: "port", }, } fmt.Println(c) } 

La manera menos adecuada y fea, pero aún funciona:

 c := &Configuration{ Val: "test", Proxy: struct { Address string Port string }{ Address: "addr", Port: "80", }, } 

Si no desea ir con la definición de estructura separada para la estructura anidada y no le gusta el segundo método sugerido por @OneOfOne, puede utilizar este tercer método:

 package main import "fmt" type Configuration struct { Val string Proxy struct { Address string Port string } } func main() { c := &Configuration{ Val: "test", } c.Proxy.Address = `127.0.0.1` c.Proxy.Port = `8080` } 

Puede verificarlo aquí: https://play.golang.org/p/WoSYCxzCF2

Defina su estructura Proxy separado, fuera de la Configuration , así:

 type Proxy struct { Address string Port string } type Configuration struct { Val string P Proxy } c := &Configuration{ Val: "test", P: Proxy{ Address: "addr", Port: "80", }, } 

Ver http://play.golang.org/p/7PELCVsQIc

Usted tiene esta opción también:

 type Configuration struct { Val string Proxy } type Proxy struct { Address string Port string } func main() { c := &Configuration{"test", Proxy{"addr", "port"}} fmt.Println(c) } 

Un problema surge cuando se quiere crear una instancia de un tipo público definido en un paquete externo y ese tipo incrusta otros tipos que son privados.

Ejemplo:

 package animals type otherProps{ Name string Width int } type Duck{ Weight int otherProps } 

¿Cómo instancias un Duck en tu propio progtwig? Esto es lo mejor que pude hacer:

 package main import "github.com/someone/animals" func main(){ var duck animals.Duck // Can't instantiate a duck with something.Duck{Weight: 2, Name: "Henry"} because `Name` is part of the private type `otherProps` duck.Weight = 2 duck.Width = 30 duck.Name = "Henry" } 

Puedes definir una estructura y crear su objeto en otra estructura como he hecho a continuación:

 package main import "fmt" type Address struct { streetNumber int streetName string zipCode int } type Person struct { name string age int address Address } func main() { var p Person p.name = "Vipin" p.age = 30 p.address = Address{ streetName: "Krishna Pura", streetNumber: 14, zipCode: 475110, } fmt.Println("Name: ", p.name) fmt.Println("Age: ", p.age) fmt.Println("StreetName: ", p.address.streetName) fmt.Println("StreeNumber: ", p.address.streetNumber) } 

Espero que te haya ayudado 🙂

Debes redefinir la estructura sin nombre durante &Configuration{}

 package main import "fmt" type Configuration struct { Val string Proxy struct { Address string Port string } } func main() { c := &Configuration{ Val: "test", Proxy: struct { Address string Port string }{ Address: "127.0.0.1", Port: "8080", }, } fmt.Println(c) } 

https://play.golang.org/p/Fv5QYylFGAY