我有以下几种类型:
type Value interface{} type NamedValue struct { Name string Value Value } type ErrorValue struct { NamedValue Error error }
我可以使用use v := NamedValue{Name: "fine", Value: 33},但是我 不能 使用e := ErrorValue{Name: "alpha", Value: 123, Error: err}
v := NamedValue{Name: "fine", Value: 33}
e := ErrorValue{Name: "alpha", Value: 123, Error: err}
似乎可以嵌入语法,但是使用它无效吗?
嵌入式类型是(未命名的)字段,由不合格的类型名称引用。
规格:结构类型:
使用类型但没有显式字段名称声明的字段是 匿名字段 ,也称为 嵌入式 字段或该类型在结构中的嵌入。必须将嵌入式类型指定为类型名称T或指向非接口类型名称的指针*T,并且T本身不能为指针类型。 非限定类型名称充当字段名称。
T
*T
因此,请尝试:
e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}
如果您省略了复合文字中的字段名称,也可以使用:
e := ErrorValue{NamedValue{"fine", 33}, err}
在Go Playground上尝试示例。