为了账号安全,请及时绑定邮箱和手机立即绑定

初始化嵌套结构定义

初始化嵌套结构定义

Go
哈士奇WWW 2021-08-30 14:42:44
你如何初始化以下结构?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 initializersundefined: Contact我试过:s := &Sender{        BankCode: "BC",        Name:     "NAME",        Contact: Contact {            Name: "NAME",            Phone: "PHONE",        },    }没有用:undefined: Contact
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

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


s := &Sender{

    BankCode: "BC",

    Name:     "NAME",

    Contact: struct {

        Name  string

        Phone string

    }{

        Name:  "NAME",

        Phone: "PHONE",

    },

}

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


查看完整回答
反对 回复 2021-08-30
?
九州编程

TA贡献1785条经验 获得超4个赞

分别定义两个结构体,然后在“Sender”中嵌入“Contact”怎么样?


type Sender struct {

    BankCode string

    Name     string

    Contact

}


type Contact struct {

    Name  string

    Phone string

}

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


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


查看完整回答
反对 回复 2021-08-30
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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

}


查看完整回答
反对 回复 2021-08-30
  • 3 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信