3 回答
TA贡献1878条经验 获得超4个赞
这不是一个“匿名字段”,所使用的语言特性被称为“嵌入”,它是 Go 解决继承的一种方式。在 Go 中,如果StructA
embeds,StructB
则字段 onStructB
和接收类型为 的方法StructB
将在 上直接访问StructA
。但是,导出与未导出的规则相同(即,StructB
无法像平常一样在包范围之外访问中的未导出字段)。我不能说你为什么要在所有结构中使用这个值,这只是一种有效的方法。归根结底,它只是一个 int,您只是通过不给它一个实际名称来节省几行代码,仅此而已。
TA贡献1852条经验 获得超7个赞
NodeType不是常数。它是一种类型,并且已嵌入到ListNode结构中。
结构类型能够包含匿名或嵌入的字段。这也称为嵌入类型。当我们将一个类型嵌入到一个结构体中时,该类型的名称作为一个嵌入字段的字段名称。
例如,您将按照以下方式设置NodeTypea ListNode:
ln := &ListNode{NodeType: NodeText}
fmt.Println(ln)
// Outputs: &{0}
进一步阅读:http : //www.goinggo.net/2014/05/methods-interfaces-and-embedded-types.html(向下滚动)和https://golang.org/doc/effective_go.html#embedding
TA贡献1830条经验 获得超3个赞
对于这样的匿名或嵌入字段,根据 Go 编程语言规范,
未限定的类型名称用作字段名称。
在您的情况下,您可以编写以下内容:
var node1 ListNode
node1.NodeType = NodeText
或者
node2 := ListNode{NodeText}
或者
node3 := ListNode{
NodeType: NodeText,
}
这三者创造了相同的价值。
- 3 回答
- 0 关注
- 131 浏览
添加回答
举报