0
我在goroutine内部基于迭代变量i
进行了一些条件检查,发现它给了我不期望的结果,我决定用一些简单的方法来确认它码。使用goroutine迭代给出了意想不到的结果
for i := 1; i <= 5; i++ {
wg.Add(1)
fmt.Println(i)
go func() {
fmt.Println(i)
wg.Done()
}()
}
wg.Wait()
1
2
3
4
5
6
6
6
6
6
这是预期的行为吗?有人可以解释为什么6次被打印5次,但我只是迭代到5?
另请参阅常见问题解答:https://golang.org/doc/faq#closures_and_goroutines – JimB
也许更确切的重复:http://stackoverflow.com/questions/36776315/go-concurrency-with-for-loop-和 - 匿名函数 - 意外地行为 – JimB
没有必要只有6,6,6,6。增加我的价值。你会得到不同的价值。您在执行goroutine时获得了i的价值。 – khrm