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