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

关于 golang 中未使用的变量

关于 golang 中未使用的变量

Go
凤凰求蛊 2022-09-05 17:45:27
为什么如果我们在切片中追加数据而不使用它(程序中的变量mySlice),为什么不抛出错误消息“未使用的变量”golang。谢谢#example var mySlice []string mySlice = append(mySlice,"halo")和地图相同的行为#examplevar my = map[string]int{}my["tes"]=1
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

规范: 变量声明:

实现限制:如果从未使用变量,编译器可能会将声明函数体内的变量定为非法。

如您所见,编译器可能接受也可能不接受未使用的变量。当前的 Go 编译器通过检查变量是否被读取来实现这一点。读取变量意味着使用该变量。

“未使用的变量”(或者更确切地说是“声明但未使用”)由编译器给出,如果您不读取变量。

例如:

var i int
i = 3

即使您在上面的示例中为赋值,由于未读取该值,这也是编译时错误。i

使用追加到切片涉及读取切片(切片传递到 )。append()append()

将值分配给映射键涉及读取映射值。

如果您不使用但“直接”为切片元素分配值,情况也是如此:append()

var i = []int{0}
i[0] = 1

这是可以的,因为分配到涉及读取切片标头以确定我们要分配到的元素(地址)。i[0]

但是,如果我们像这样分配给它自己:i

var i = []int{0}
i = []int{1}

此赋值不涉及读取,因此它也是编译时错误。i

例如,如果我们要使用结构:

type Point struct{ x, y int }var p Point
p.x = 1

这仍然编译,即使赋值并不真正涉及读取结构。我们可以将其视为“识别”涉及访问变量的字段。pp.xp

这是一点点“灰色地带”,是基于Go作者的意见,但这就是他们决定和实现它的方式。


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 229 浏览
慕课专栏
更多

添加回答

举报

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