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

На овај начин, безбедно читање је могуће ако се обезбеди синхронизација са записом.