cpp

Структура 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

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp