Go offre due approcci alla sicurezza della concorrenza: channel ("condividere la memoria comunicando") e il pacchetto sync (mutex/lock per proteggere direttamente la memoria condivisa). Nonostante la filosofia dei channel-first di Go, i primitivi sync sono spesso la scelta più semplice e efficiente per proteggere lo stato condiviso.
sync.Mutex — proteggi lo stato condiviso con un lock
Counter {
mu sync.Mutex
count
}
Increment() {
c.mu.Lock()
c.mu.Unlock()
c.count++
}
