【问题标题】:Why golang don't iterate correctly in my for loop with range?为什么golang不能在我的for循环中正确迭代范围?
【发布时间】:2014-03-16 08:41:36
【问题描述】:

我很困惑为什么下面的代码没有打印出迭代值。

test:= []int{0,1,2,3,4}
for i,v := range test{
  go func(){
    fmt.Println(i,v)
  }
}

我认为应该打印出来

0 0
1 1
2 2
3 3 
4 4

但是,它打印出来了

4 4
4 4
4 4
4 4
4 4

【问题讨论】:

    标签: go goroutine


    【解决方案1】:

    您够程不捕获变量的当前值i和v,而是他们引用变量本身。在这种情况下,5个人丁够程并没有获得计划,直到for循环完成,因此所有打印出来i最后的价值观和v。 P>

    如果你想捕捉一些变量的gouroutine的当前值,您可以修改代码来读取像下面这样: P>

    go func(i, v int){
        fmt.Println(i,v)
    }(i, v)
    

    现在每个gouroutine有它自己的在它衍生出的时间保持的值的变量的副本。 P>

    【讨论】:

    • 哦谢谢,詹姆斯!我试图修复它了将近一个小时。我的问题就解决了。 SPAN>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多