Sobes.tech
Junior — Middle

Vai ir iespējams droši lasīt datus no map datu struktūras bez kļūdu rašanās riska?

sobes.tech AI

Atbilde no AI

Go valodā, lasīšana no kartes ir droša, ja tajā brīdī neviens to nemaina. Tomēr, ja paralēli notiek rakstīšana (pievienošana, dzēšana vai elementu maiņa), lasīšana var novest pie panikas (izpildes kļūdas).

Lai droši lasītu no kartes daudzvirzienu vidē, parasti izmanto:

  • sync.RWMutex — lai bloķētu karti rakstīšanai un ļautu paralēlu lasīšanu
  • sync.Map — specializētu un drošu datu struktūru kartēm

Piemērs ar 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ādējādi, droša lasīšana ir iespējama, ja tiek nodrošināta sinhronizācija ar rakstīšanu.