关于 golang 中未使用的变量

为什么如果我们在切片中追加数据而不使用它(程序中的变量mySlice),为什么不抛出错误消息“未使用的变量”golang。谢谢


#example


 var mySlice []string


 mySlice = append(mySlice,"halo")

和地图相同的行为


#example


var my = map[string]int{}


my["tes"]=1


凤凰求蛊
浏览 230回答 1
1回答

慕姐8265434

规范: 变量声明:实现限制:如果从未使用变量,编译器可能会将声明函数体内的变量定为非法。如您所见,编译器可能接受也可能不接受未使用的变量。当前的 Go 编译器通过检查变量是否被读取来实现这一点。读取变量意味着使用该变量。“未使用的变量”(或者更确切地说是“声明但未使用”)由编译器给出,如果您不读取变量。例如:var i int i = 3即使您在上面的示例中为赋值,由于未读取该值,这也是编译时错误。i使用追加到切片涉及读取切片(切片传递到 )。append()append()将值分配给映射键涉及读取映射值。如果您不使用但“直接”为切片元素分配值,情况也是如此:append()var i = []int{0} i[0] = 1这是可以的,因为分配到涉及读取切片标头以确定我们要分配到的元素(地址)。i[0]但是,如果我们像这样分配给它自己:ivar i = []int{0} i = []int{1}此赋值不涉及读取,因此它也是编译时错误。i例如,如果我们要使用结构:type Point struct{ x, y int }var p Point p.x = 1这仍然编译,即使赋值并不真正涉及读取结构。我们可以将其视为“识别”涉及访问变量的字段。pp.xp这是一点点“灰色地带”,是基于Go作者的意见,但这就是他们决定和实现它的方式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go