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 »