Go oferă două abordări pentru siguranța concurenței: channels ("share memory by communicating") și pachetul sync (mutexuri/locks pentru protejarea directă a memoriei shared). În ciuda filosofiei channel-first a Go, primitivele din sync sunt adesea alegerea mai simplă și mai eficientă pentru protejarea stării shared.
sync.Mutex — protejează starea shared cu un lock
Counter {
mu sync.Mutex
count
}
Increment() {
c.mu.Lock()
c.mu.Unlock()
c.count++
}
