-race をつけてCIを通しているのにAPIがデータ競合で落ちてしまいました。調べていたら-raceがそもそも何をしているかに行き着いたので簡単に共有します。 -race とは -raceはコンパイラフラッグの一種で競合を検知するのに便利です。例えば下記のコードはmapへの読み書きが同時に起こってパニックするコードです。これをgo run main.go -raceのように実行するとwarningを出してくれます。 package main import ( "fmt" "strconv" "time" ) func main() { m := make(map[string]int) go func() { for i := 0; i < 1000; i++ { m[strconv.Itoa(i)] = i // write } }() go func() { for i := 0;
![Go の -race option は内部で何をしているのか。何を検知しないのか。 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/2d2521ae053907a1da1aa7afcb3268129d8f9501/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9R28lMjAlRTMlODElQUUlMjAtcmFjZSUyMG9wdGlvbiUyMCVFMyU4MSVBRiVFNSU4NiU4NSVFOSU4MyVBOCVFMyU4MSVBNyVFNCVCRCU5NSVFMyU4MiU5MiVFMyU4MSU5NyVFMyU4MSVBNiVFMyU4MSU4NCVFMyU4MiU4QiVFMyU4MSVBRSVFMyU4MSU4QiVFMyU4MCU4MiVFNCVCRCU5NSVFMyU4MiU5MiVFNiVBNCU5QyVFNyU5RiVBNSVFMyU4MSU5NyVFMyU4MSVBQSVFMyU4MSU4NCVFMyU4MSVBRSVFMyU4MSU4QiVFMyU4MCU4MiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9ZGMwN2EwYmRiMjUyZjFhYzdiZGZkYTdlMDY0YTY5MjU%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBwbzNyaW4mdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWZhZGI5ZWU2NGNmYmJhZWM2Y2JlZWFiYTQyNzQ0Nzlk%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3Df06c516348466e9e8900d2f8130d0b7a)