Junior — Middle
Je možné bezpečně číst data ze struktury map bez rizika vzniku chyb?
sobes.tech AI
Odpověď od AI
V Go je čtení z mapy bezpečné, pokud v daném okamžiku nikdo mapu nem mění. Pokud však dochází ke zápisu (přidání, odstranění nebo změna prvků) paralelně, může čtení vést k panice (runtime error).
Pro bezpečné čtení z mapy v prostředí s více vlákny se obvykle používají:
- sync.RWMutex — pro zamčení mapy při zápisu a umožnění paralelního čtení
- sync.Map — specializovaná, vlákny bezpečná datová struktura pro mapy
Příklad s RWMutex:
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock()
defer mu.RUnlock()
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock()
defer mu.Unlock()
m[key] = val
}
Tím je možné bezpečně číst, pokud je zajištěna synchronizace s zápisem.