不幸的是,如果结构字段的类型是匿名结构,则 _在构造时_只能通过“复制”匿名结构类型(再次指定)来初始化它:
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 = 321fmt.Printf("%+vn", 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("%+vn", df)输出(在Go Playground上尝试):
{Filter:{Name:myname ID:123}}


