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.