Junior — Middle
Da li je moguće sigurno čitati podatke iz strukture podataka map bez rizika od grešaka?
sobes.tech АИ
Одговор од АИ
У Go, читање из мапе је безбедно ако у том тренутку нико не мења мапу. Међутим, ако се паралелно врши запис (додавање, брисање или измена елемената), читање може довести до панике (грешке у време извршавања).
Да би се безбедно читало из мапе у окружењу са више нитова, обично се користе:
- sync.RWMutex — за закључавање мапе за запис и омогућавање паралелног читања
- sync.Map — специјализована, безбедна структура података за мапе
Пример са 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
}
На овај начин, безбедно читање је могуће ако се обезбеди синхронизација са записом.