const 值在匿名结构体字段中有什么作用?

鉴于以下代码:


type NodeType int


const (

    NodeText NodeType = iota

    NodeAction

    // etc..

)


type ListNode struct {

    NodeType

}

将NodeType类型作为匿名字段包含在ListNode结构中的解释是什么?它是否充当结构的某种标识符?


茅侃侃
浏览 132回答 3
3回答

UYOU

这不是一个“匿名字段”,所使用的语言特性被称为“嵌入”,它是 Go 解决继承的一种方式。在 Go 中,如果StructAembeds,StructB则字段 onStructB和接收类型为 的方法StructB将在 上直接访问StructA。但是,导出与未导出的规则相同(即,StructB无法像平常一样在包范围之外访问中的未导出字段)。我不能说你为什么要在所有结构中使用这个值,这只是一种有效的方法。归根结底,它只是一个 int,您只是通过不给它一个实际名称来节省几行代码,仅此而已。

慕姐4208626

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

牛魔王的故事

对于这样的匿名或嵌入字段,根据 Go 编程语言规范,未限定的类型名称用作字段名称。在您的情况下,您可以编写以下内容:var node1 ListNodenode1.NodeType = NodeText或者node2 := ListNode{NodeText}或者node3 := ListNode{    NodeType: NodeText,}这三者创造了相同的价值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go