Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Структура Map: потокобезопасный словарь
Структура Map
из пакета sync
реализует словарь типа map[interface{}]interface{}
безопасный для использования несколькими потоками без блокировок. Структура Map
содержит следующие методы:
Store()
— добавляет элемент с указанным ключом и значением. Если ключ существует в словаре, то значение элемента будет обновлено. Формат метода:
(*sync.Map).Store(key interface{}, value interface{})
Пример:
// import "sync"
var m sync.Map
m.Store("key1", 1)
Load()
— позволяет получить значение по ключу. Через второе возвращаемое значение доступноtrue
, если элемент с указанным ключом существует, иfalse
— в противном случае. Формат метода:
(*sync.Map).Load(key interface{}) (value interface{}, ok bool)
Пример:
fmt.Println(m.Load("key1")) // 1 true
fmt.Println(m.Load("key2")) // <nil> false
LoadOrStore()
— позволяет получить значение по ключу, если элемент существует, или добавляет новый элемент и возвращает его значение. Через второе возвращаемое значение доступноtrue
, если элемент с указанным ключом существует и получено его значение, иfalse
— если элемент был добавлен. Формат метода:
(*sync.Map).LoadOrStore(key interface{},
value interface{}) (actual interface{}, loaded bool)
Пример:
fmt.Println(m.LoadOrStore("key1", 0)) // 1 true
fmt.Println(m.LoadOrStore("key2", 2)) // 2 false
fmt.Println(m.Load("key1")) // 1 true
fmt.Println(m.Load("key2")) // 2 true
Range()
— позволяет перебрать все элементы словаря. В качестве параметра указывается функция, которая вызывается для каждого элемента словаря ровно один раз. Через параметры внутри функции доступны ключ и значение текущего элемента. Если функция возвращает значениеfalse
, то перебор элементов прекращается. Формат метода:
(*sync.Map).Range(f func(key interface{},
value interface{}) bool)
Пример:
m.Range(func(key, value interface{}) bool {
fmt.Println(key, value)
return true
})
// key1 1
// key2 2
Delete()
— удаляет элемент с указанным ключом. Формат метода:
(*sync.Map).Delete(key interface{})
Пример:
fmt.Println(m.Load("key2")) // 2 true
m.Delete("key2")
fmt.Println(m.Load("key2")) // <nil> false
LoadAndDelete()
— удаляет существующий элемент с указанным ключом, возвращая его значение. Через второе возвращаемое значение доступноtrue
, если элемент с указанным ключом удален и доступно его значение, иfalse
— если элемент не существует. Формат метода:
(*sync.Map).LoadAndDelete(
key interface{}) (value interface{}, loaded bool)
Пример:
fmt.Println(m.LoadAndDelete("key1")) // 1 true
fmt.Println(m.LoadAndDelete("key2")) // <nil> false
fmt.Println(m.Load("key1")) // <nil> false
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов