Пакет sync.Map предоставляет параллельно безопасную хеш-таблицу. Он оптимизирован для случаев использования, когда ключи в основном читаются и реже записываются.
Ключевые особенности:
Len(): Поддержка метода Len() сделала бы параллельно безопасную реализацию сложной и дорогой.map.Основные методы:
Load(key any) (value any, ok bool): Загружает значение, связанное с ключом. Если ключ отсутствует, возвращает false.Store(key, value any): Сохраняет значение для ключа. Может использоваться для добавления или обновления.LoadOrStore(key any, value any) (actual any, loaded bool): Загружает значение, связанное с ключом, если оно уже существует. В противном случае сохраняет указанное значение. Возвращает фактическое значение и флаг, указывающий, было ли значение загружено (true) или сохранено (false).Delete(key any): Удаляет значение для ключа.Range(f func(key, value any) bool): Итерирует по элементам в мапе в произвольном порядке. Функция f вызывается для каждой пары ключ-значение. Если f возвращает false, итерация останавливается.Пример использования:
go
В целом, sync.Map — хороший выбор, когда параллельные чтения значительно преобладают над записями и удалениями. В противном случае, использование map в связке с sync.Mutex или sync.RWMutex может быть более подходящим.