Existem basicamente duas formas para resolver problemas de race condition. Mutex e Channels.
Se você não está familiarizado com o termo race condition, não se preocupe. Esse termo é utilizado para descrever um pedaço do código que será executado por múltiplas goroutines e que, a cada execução, seu resultado pode variar devido a forma como o Go alterna a execução entre goroutines.
Para ficar um pouco mais claro, vamos dar uma olhada no código abaixo.
package main
import (
"fmt"
"sync"
)
var total = 0
func count(wg *sync.WaitGroup) {
total++
wg.Done()
}
func main() {
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go count(&wg)
}
wg.Wait()
fmt.Println("total: ", total)
}
Leia mais » 