Sobes.tech
Назад к вопросам
Junior — Middle
78

Можно ли осуществлять безопасное чтение данных из структуры данных map без риска возникновения ошибок?

Ответ от нейросети

sobes.tech AI

В Go чтение из map безопасно, если в этот момент никто не изменяет map. Однако, если параллельно происходит запись (добавление, удаление или изменение элементов), то чтение может привести к панике (runtime error).

Чтобы безопасно читать из map в многопоточной среде, обычно используют:

  • sync.RWMutex — для блокировки map на запись и разрешения параллельного чтения
  • sync.Map — специализированная потокобезопасная структура данных для 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
}

Таким образом, безопасное чтение возможно, если обеспечить синхронизацию с записью.