Golang 嵌入式结构类型:了解语法和用法
在 Go 中使用嵌入式结构类型时,理解它们的语法和用法至关重要正确使用。本文解决了无法初始化嵌入结构的问题。
问题:
考虑以下类型:
type Value interface{} type NamedValue struct { Name string Value Value } type ErrorValue struct { NamedValue Error error }
尝试使用语法初始化 ErrorValue:
e := ErrorValue{Name: "alpha", Value: 123, Error: err}
结果错误。
解决方案:
嵌入类型,也称为未命名字段,通过其非限定类型名称来引用。在提供的代码中,初始化 ErrorValue 的语法不正确。
根据 Go 语言规范,应使用不带字段名称的类型名称来初始化嵌入字段。以下是正确的语法:
e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}
或者,您可以省略复合文字中的字段名称:
e := ErrorValue{NamedValue{"fine", 33}, err}
示例:
package main import "fmt" type Value interface{} type NamedValue struct { Name string Value Value } type ErrorValue struct { NamedValue Error error } func main() { e := ErrorValue{NamedValue{Name: "alpha", Value: 123}, fmt.Errorf("some error")} fmt.Println(e) }
输出:
{NamedValue:{Name:alpha Value:123} Error:some error}
通过理解了解嵌入式结构类型的语法和用法,您可以在 Go 程序中有效地利用它们。
以上是如何正确初始化Go中的嵌入式结构体?的详细内容。更多信息请关注PHP中文网其他相关文章!