嗨,我是Golang的新手,请帮助我。我已经在结构内部定义了一个结构。但是,当我尝试初始化主结构时出现错误。
type DetailsFilter struct { Filter struct { Name string ID int } } var M map[string]interface{} M = make(map[string]interface{}) M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5} var detailsFilter = DetailsFilter{Filter: M["Filter"]}}
我得到的错误是:不能在字段值中使用(类型接口{})作为类型结构:需要类型声明。
请提出一种初始化DetailsFilter的方法。我尝试执行在Golang中初始化嵌套结构中描述的方法,但即使这样也不起作用。
不幸的是,如果结构字段的类型是匿名结构,则 _在构造时_只能通过“复制”匿名结构类型(再次指定)来初始化它:
type DetailsFilter struct { Filter struct { Name string ID int } } df := DetailsFilter{Filter: struct { Name string ID int }{Name: "myname", ID: 123}} fmt.Println(df)
输出:
{Filter:{Name:myname ID:123}}
因此,我建议不要在构造时初始化它,而是在创建零值结构之后初始化它,如下所示:
df = DetailsFilter{} df.Filter.Name = "myname2" df.Filter.ID = 321 fmt.Printf("%+v\n", df)
{Filter:{Name:myname2 ID:321}}
在Go Playground上尝试一下。
或者根本不使用匿名结构作为字段类型,而应像这样命名类型:
type Filter struct { Name string ID int } type DetailsFilter struct { Filter Filter }
然后,您可以像这样简单地对其进行初始化:
df := DetailsFilter{Filter: Filter{Name: "myname", ID: 123}} fmt.Printf("%+v\n", df)
输出(在Go Playground上尝试):