Struct 初始化嵌套结构定义

Struct 初始化嵌套结构定义,struct,go,initialization,Struct,Go,Initialization,如何初始化以下结构 type Sender struct { BankCode string Name string Contact struct { Name string Phone string } } 我试过: s := &Sender{ BankCode: "BC", Name: "NAME", Contact {

如何初始化以下结构

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
不起作用:

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
我试过:

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
不起作用:

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

分别定义这两个结构,然后在“发送者”中嵌入“联系人”怎么样

如果您这样做,您的第二次初始化尝试将起作用。此外,您可以单独使用“联系人”


如果你真的想使用嵌套结构,你可以使用Ainar-G的答案,但是这个版本并不漂亮(如果结构嵌套得很深,它会变得更难看,如图所示),所以如果可以避免的话,我不会这么做。

你的
联系人
是一个匿名结构类型的字段。因此,必须重复类型定义:

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

但在大多数情况下,最好按照rob74的建议定义一个单独的类型。

这是另一个选项,但我只想知道如何初始化嵌套结构。您的答案是解决嵌套结构定义的更好方法,但Ainar-G的答案对我的问题是正确的。好的,这似乎是正确的答案,但正如你所说,rob74的回答更优雅。
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",
}