我无法弄清楚如何初始化嵌套结构。在这里找一个例子: 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",
},
}
}
答案 0 :(得分:141)
那么,任何特定的理由都不能使代理自己的结构?
无论如何,你有两个选择:
正确的方法,只需将代理移动到自己的结构,例如:
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)
}
不那么正确和丑陋的方式但仍然有效:
c := &Configuration{
Val: "test",
Proxy: struct {
Address string
Port string
}{
Address: "addr",
Port: "80",
},
}
答案 1 :(得分:67)
如果您不想为嵌套结构使用单独的结构定义,并且您不喜欢@OneOfOne建议的第二种方法,则可以使用第三种方法:
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`
}
您可以在此处查看:https://play.golang.org/p/WoSYCxzCF2
答案 2 :(得分:14)
在Proxy
之外单独定义Configuration
结构,如下所示:
type Proxy struct {
Address string
Port string
}
type Configuration struct {
Val string
P Proxy
}
c := &Configuration{
Val: "test",
P: Proxy{
Address: "addr",
Port: "80",
},
}
答案 3 :(得分:9)
你也有这个选项:
type Configuration struct {
Val string
Proxy
}
type Proxy struct {
Address string
Port string
}
func main() {
c := &Configuration{"test", Proxy{"addr", "port"}}
fmt.Println(c)
}
答案 4 :(得分:5)
当您想要实例化外部包中定义的公共类型并且该类型嵌入其他私有类型时,就会出现一个问题。
示例:
package animals
type otherProps{
Name string
Width int
}
type Duck{
Weight int
otherProps
}
如何在自己的程序中实例化Duck
?这是我能想到的最好的:
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"
}
答案 5 :(得分:1)
您可以定义一个结构并在另一个结构中创建它的对象,如下所示:
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)
}
希望它能帮到你:)。
答案 6 :(得分:1)
您需要在&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)
}
答案 7 :(得分:1)
您还可以使用new
进行分配并手动初始化所有字段
package main
type Configuration struct {
Val string
Proxy struct {
Address string
Port string
}
}
func main() {
c := new(Configuration)
c.Val = "test"
c.Proxy.Address = "addr"
c.Proxy.Port = "80"
}
答案 8 :(得分:0)
package main
type Proxy struct {
Address string
Port string
}
type Configuration struct {
Proxy
Val string
}
func main() {
c := &Configuration{
Val: "test",
Proxy: Proxy {
Address: "addr",
Port: "80",
},
}
}