嗨,我对 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"]}}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:不能使用(类型接口{})作为字段值中的类型结构:需要类型断言。
请提出一种初始化 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)
Run Code Online (Sandbox Code Playgroud)
输出:
{Filter:{Name:myname ID:123}}
Run Code Online (Sandbox Code Playgroud)
所以我建议不要在构造时初始化它,而是在创建零值结构之后,像这样:
df = DetailsFilter{}
df.Filter.Name = "myname2"
df.Filter.ID = 321
fmt.Printf("%+v\n", df)
Run Code Online (Sandbox Code Playgroud)
输出:
{Filter:{Name:myname2 ID:321}}
Run Code Online (Sandbox Code Playgroud)
在Go Playground上试一试。
或者根本不使用匿名结构作为字段类型,将类型命名为:
type Filter struct {
Name string
ID int
}
type DetailsFilter struct {
Filter Filter
}
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地像这样初始化它:
df := DetailsFilter{Filter: Filter{Name: "myname", ID: 123}}
fmt.Printf("%+v\n", df)
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
{Filter:{Name:myname ID:123}}
Run Code Online (Sandbox Code Playgroud)