Sobes.tech
Back to questions
Senior
6

Чем map отличается от sync.Map?

Companies where asked
FinFrame

Answer from AI

sobes.tech AI

map в Go — это встроенный тип данных для хранения пар ключ-значение, но он не потокобезопасен. При одновременном доступе из нескольких горутин без синхронизации может возникнуть гонка данных и паника.

sync.Map — это специализированная структура из пакета sync, которая обеспечивает потокобезопасный доступ к данным без необходимости внешней блокировки.

Основные отличия:

  • Потокобезопасность: map требует внешней синхронизации (например, с помощью sync.Mutex), sync.Map — встроенная.
  • API: sync.Map имеет методы Load, Store, LoadOrStore, Delete, Range, а обычный map использует синтаксис обращения через квадратные скобки.
  • Производительность: sync.Map оптимизирован для сценариев с частыми операциями чтения и редкими записями. Для интенсивных записей обычный map с мьютексом может быть быстрее.

Пример использования sync.Map:

var m sync.Map

// Запись
m.Store("key", "value")

// Чтение
if val, ok := m.Load("key"); ok {
    fmt.Println(val)
}

// Удаление
m.Delete("key")

// Итерация
m.Range(func(k, v interface{}) bool {
    fmt.Println(k, v)
    return true
})

Выбирайте map с мьютексом, если у вас сложная логика и много записей, а sync.Map — если нужно быстро и просто обеспечить потокобезопасность для преимущественно читаемых данных.