Sobes.tech
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.