Intern
Da li je sigurno čitati mape u Go?
sobes.tech АИ
Одговор од АИ
U jeziku Go, čitanje iz map nije sigurno za niti ako se istovremeno vrši zapis. Za sigurno čitanje u višestrukom okruženju, potrebno je koristiti sinhronizaciju, na primer, sync.RWMutex za zaključavanje pri čitanju i pisanju, ili koristiti sync.Map, koji je posebno dizajniran za konkurentan pristup.
Primer sa sync.RWMutex:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock() // zaključavanje za čitanje
defer mu.RUnlock() // otključavanje
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock() // zaključavanje za pisanje
defer mu.Unlock() // otključavanje
m[key] = val
}
Ili koristite sync.Map:
import "sync"
var m sync.Map
func read(key string) (interface{}, bool) {
return m.Load(key)
}
func write(key string, val interface{}) {
m.Store(key, val)
}
sync.Map je koristan kada postoji mnogo konkurentnih operacija, ali ima specifične osobine u pogledu performansi i API-ja.