小编典典

Golang嵌入式结构类型

go

我有以下几种类型:

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}

似乎可以嵌入语法,但是使用它无效吗?


阅读 226

收藏
2020-07-02

共1个答案

小编典典

嵌入式类型是(未命名的)字段,由不合格的类型名称引用。

规格:结构类型:

使用类型但没有显式字段名称声明的字段是 匿名字段 ,也称为 嵌入式
字段或该类型在结构中的嵌入。必须将嵌入式类型指定为类型名称T或指向非接口类型名称的指针*T,并且T本身不能为指针类型。
非限定类型名称充当字段名称。

因此,请尝试:

e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}

如果您省略了复合文字中的字段名称,也可以使用:

e := ErrorValue{NamedValue{"fine", 33}, err}

Go Playground上尝试示例。

2020-07-02