Go中循环变量问题
ISSUE
在之前一次工作中,我遇到了一个go的循环变量作用域问题,当时困扰了我很久,在此记录一下。具体情况请看下面的代码
1 | import "fmt" |
理论上,我们希望得到的是arr={0,1,2,3,4,5,6,7,8,9}
,但是实际上我们得到的是arr={9,9,9,9,9,9,9,9,9,9}
这是因为go使用for i:=0
创建的循环变量i
从始至终都是一个实例,而不是每次都创建新实例,这就导致了在循环体中&i
从始至终都是同一个地址,然后不断被覆盖(循环时,arr={1}
,arr={2,2}
,arr={3,3,3}
….这样)
SOLVE
解决方法也很简单,我们可以显示给它创建新实例,添加i:=i
1 | import "fmt" |
还有一种方式就是使用闭包解决
1 | import "fmt" |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gallifrey的计算机学习日记!
评论