为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
茅侃侃 2021-11-22 15:42:43
鉴于以下代码:type NodeType intconst (    NodeText NodeType = iota    NodeAction    // etc..)type ListNode struct {    NodeType}将NodeType类型作为匿名字段包含在ListNode结构中的解释是什么?它是否充当结构的某种标识符?
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-11-22
?
慕姐4208626

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


查看完整回答
反对 回复 2021-11-22
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

对于这样的匿名或嵌入字段,根据 Go 编程语言规范,


未限定的类型名称用作字段名称。


在您的情况下,您可以编写以下内容:


var node1 ListNode

node1.NodeType = NodeText

或者


node2 := ListNode{NodeText}

或者


node3 := ListNode{

    NodeType: NodeText,

}

这三者创造了相同的价值。


查看完整回答
反对 回复 2021-11-22
  • 3 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信