Go oferece duas abordagens para concorrência segura: channels ("compartilhar memória por comunicação") e o pacote sync (mutexes/locks para proteger memória compartilhada diretamente). Apesar da filosofia Go orientada a channels, primitivas sync são frequentemente a escolha mais simples e eficiente para proteger estado compartilhado.
sync.Mutex — proteger estado compartilhado com um lock
Counter {
mu sync.Mutex
count
}
Increment() {
c.mu.Lock()
c.mu.Unlock()
c.count++
}
