在Golang中初始化嵌套的结构定义

Kir*_*ril 41 struct initialization go

你如何初始化以下结构?

type Sender struct {
    BankCode string
    Name     string
    Contact  struct {
        Name    string
        Phone   string
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

s := &Sender{
        BankCode: "BC",
        Name:     "NAME",
        Contact {
            Name: "NAME",
            Phone: "PHONE",
        },
    }
Run Code Online (Sandbox Code Playgroud)

没工作:

mixture of field:value and value initializers
undefined: Contact
Run Code Online (Sandbox Code Playgroud)

我试过了:

s := &Sender{
        BankCode: "BC",
        Name:     "NAME",
        Contact: Contact {
            Name: "NAME",
            Phone: "PHONE",
        },
    }
Run Code Online (Sandbox Code Playgroud)

没工作:

undefined: Contact
Run Code Online (Sandbox Code Playgroud)

Ain*_*r-G 55

Contact是一个具有匿名结构类型的字段.因此,您必须重复类型定义:

s := &Sender{
    BankCode: "BC",
    Name:     "NAME",
    Contact: struct {
        Name  string
        Phone string
    }{
        Name:  "NAME",
        Phone: "PHONE",
    },
}
Run Code Online (Sandbox Code Playgroud)

但在大多数情况下,最好将rob74定义为单独的类型.

  • 好吧,这似乎是正确的答案,但正如你所说rob74的答案更优雅. (2认同)

rob*_*b74 33

如何分别定义两个结构然后在"发件人"中嵌入"联系人"?

type Sender struct {
    BankCode string
    Name     string
    Contact
}

type Contact struct {
    Name  string
    Phone string
}
Run Code Online (Sandbox Code Playgroud)

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

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