データレースは、2つ以上のゴルーチンが同じメモリに同時にアクセスし、少なくとも1つのアクセスが書き込みであり、それらの間に同期がない場合に発生します。結果は未定義の動作になります。データ破損、クラッシュ、または間欠的に現れる誤った結果が生じます。Goは組み込みのrace detectorを提供しており、これを使ってレースを見つけることができます。
データレースの様子
{
counter :=
wg sync.WaitGroup
i := ; i < ; i++ {
wg.Add()
{
wg.Done()
counter++
}()
}
wg.Wait()
fmt.Println(counter)
}
