求回答:下面代码的结果

lhtzbj12 · · 1187 次点击
猜想代码想要说明两个问题: **一是匿名函数中的循环变量快照问题**:第一个for循环问题(一般情况下这么认为这段代码是有问题的)的原因在于循环变量的作用域,for循环语句引入了新的词法块,循环变量`i`在这个词法块中被声明。在该循环中生成的所有函数值都共享相同的循环变量。**需要注意**,函数值中记录的是循环变量的内存地址,而不是循环变量某一时刻的值,后续的迭代会不断更新`i`的值,当函数执行时,for循环已完成,`i`中存储的值等于最后一次迭代的值。为了解决这个问题,我们会引入一个局部变量,作为循环变量的副本,如图: ![image.png](https://static.studygolang.com/180109/9d998e0fd80d154cc8e8d4603c37d57c.png) **二是**, GOMAXPROCS设置为1,是设置一个cpu核心去处理,将影响goroutine的并发,代码中的go func()相当于串行执行(不是并行),所有输出结果始终是一样
#12
更多评论
这里是答案 https://wide.b3log.org/playground/0bc5162cf88188d75a2e59ef537085d0.go
#1
这是很经典的问题
#2