请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

for循环中num的值

这里对for循环中num的值讲解有点问题,对于go 1.22之前的版本这是适用的,但是1.22之后go改变了
之前的变量scope是基于整个loop的,但是现在的变量scope是基于每一次的iteration,
https://go.dev/blog/loopvar-preview
https://go.dev/wiki/CommonMistakes

nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
for _, num := range nums {
	fmt.Printf("val: %d, addr: %p\n", num, &num)
	num = num * 2
}

这段代码的结果可能是,num的地址并不一样

val: 1, addr: 0xc0000100a8
val: 2, addr: 0xc0000100c8
val: 3, addr: 0xc0000100e0
val: 4, addr: 0xc0000100e8
val: 5, addr: 0xc0000100f0
val: 6, addr: 0xc0000100f8
val: 7, addr: 0xc000010100
val: 8, addr: 0xc000010108
val: 9, addr: 0xc000010110
val: 10, addr: 0xc000010118

正在回答

1回答

这个问题非常好,这里是忽略了强调版本实验环境的版本差异,由于Go 1.22引入了几个重要的改进和特性,在 Go 1.22 版本之前,for 循环声明的变量只创建一次,并在每次迭代中更新。从Go 1.22版本开始,循环的每次迭代都会创建新变量,这将会避免意外的共享错误发生。所以本节的代码需要在Go 1.22之前的版本上运行,建议在Go1.18版本上进行实验,为了保持代码的兼容性和健壮性,即使在Go 1.22以上的版本最好也使用能兼容低版本的写法

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
Go + AI 从0到1开发Docker引擎
  • 参与学习       93    人
  • 解答问题       2    个

Go + AI 从0到1开发Docker引擎

了解课程
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号