为什么如果我们在切片中追加数据而不使用它(程序中的变量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
这仍然编译,即使赋值并不真正涉及读取结构。我们可以将其视为“识别”涉及访问变量的字段。p
p.x
p
这是一点点“灰色地带”,是基于Go作者的意见,但这就是他们决定和实现它的方式。
- 1 回答
- 0 关注
- 229 浏览
添加回答
举报
0/150
提交
取消