変数iteratating i
に基づいてゴルーチン内で条件チェックを行っていて、期待していなかった結果が得られたことがわかりました。コード。ゴルーチンを使用して反復すると予期せぬ結果が出る
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回印刷されているのかを親切に説明できますか?
よくある質問:https://golang.org/doc/faq#closures_and_goroutines – JimB
より正確な重複:http://stackoverflow.com/questions/36776315/go-concurrency-with-for-loop- and-anonymous-function-behaves-unexpectedly – JimB
6,6,6,6のみを取得する必要はありません。 iの値を大きくする。あなたは別の価値を得るでしょう。あなたはgoroutineの実行時にiの値を得ています。 – khrm