首先上代码

题目一:

再运行下面代码

题目二:

题目三:

 

 

 

以下分析摘自网上资料:

原理剖析

for index, value := range xxxindexvalue

回答以上问题,记住以下两点即可。

循环变量是易变的

首先,循环变量实际上只是一个普通的变量。

for index, value := range xxx

如果循环体中会启动协程(并且协程会使用循环变量),就需要格外注意了,因为很可能循环结束后协程才开始执行,
此时,所有协程使用的循环变量有可能已被改写。(是否会改写取决于引用循环变量的方式)

循环变量需要绑定

tasktask
tasktask
 

 

总结

简单点来说

  • 如果循环体没有并发出现,则引用循环变量一般不会出现问题;
  • 如果循环体有并发,则根据引用循环变量的位置不同而有所区别
    • 通过参数完成绑定,则一般没有问题;
    • 函数体中引用,则需要显式地绑定