我有这些类型:

type Value interface{}

type NamedValue struct {
    Name  string
    Value Value
}

type ErrorValue struct {
    NamedValue
    Error error
}

我能用v := NamedValue{Name: "fine", Value: 33},但我能用e := ErrorValue{Name: "alpha", Value: 123, Error: err}

似乎嵌入语法是可以的,但是使用它却不起作用?

推荐答案

嵌入类型是(未命名的)字段,由非限定类型名称引用.

Spec: Struct types:

用类型声明但没有显式字段名的字段是anonymous field,也称为embedded字段或该类型在 struct 中的嵌入.嵌入类型必须指定为类型名称T或指向非接口类型名称*T的指针,并且T本身不能是指针类型.The unqualified type name acts as the field name.

所以试试吧:

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

如果省略复合文字中的字段名称,也同样适用:

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

试试看Go Playground号公路上的例子.

Go相关问答推荐

Go:嵌入类型不能是类型参数""

运行add. inf,这样我们就可以在app.conf中使用. inf参数了?

如何在gofiber/websocket/v2中设置状态代码和原因

从文件读取字节,将其保存到 struct 体并修改值

如何根据地址和大小打印字符串

在VSCode中如何使用特定的文件名提供编译命令

如何将 DirName 和 serial 添加到 X509v3 Authority Key Identifier

同一文件上的多个 Arrow CSV 阅读器返回 null

如何在 Golang 中打印 2 列表?

golang:解组动态 YAML 注释

速率限制特定端点

go:embed 文件扩展名模式

github.com/rs/zerolog 字段的延迟判断

如何在测试中使用自定义标志(使用`testify/suite`)

如何在Golang中的差异函数中杀死命令Exec

每 N 秒运行一次函数,上下文超时

从另一个没有重复的确定性 int

带有 *s3.S3 对象的 Golang 单元测试

Go 错误处理、类型断言和 net package包

Go 语言的select语句