Метод sync.Map.Store

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

Синтаксис

gom.Store(key, value)

Пример

Давайте создадим sync.Map и сохраним в ней несколько пар ключ-значение:

gopackage main

import (
  "fmt"
  "sync"
)

func main() {
  var m sync.Map

  m.Store("name", "John")
  m.Store("age", 30)

  name, _ := m.Load("name")
  age, _ := m.Load("age")

  fmt.Println(name, age)
}

Результат выполнения кода:

go"John" 30

Пример

Давайте сохраним значение по ключу, который уже существует в карте. Метод перезапишет старое значение:

gopackage main

import (
  "fmt"
  "sync"
)

func main() {
  var m sync.Map

  m.Store("city", "Moscow")
  m.Store("city", "Saint Petersburg")

  value, _ := m.Load("city")

  fmt.Println(value)
}

Результат выполнения кода:

go"Saint Petersburg"

Пример

Метод sync.Map.Store безопасен для использования из нескольких горутин. Давайте сохраним значения в конкурентной среде:

gopackage main

import (
  "fmt"
  "sync"
)

func main() {
  var m sync.Map
  var wg sync.WaitGroup

  for i := 0; i < 100; i++ {
    wg.Add(1)
    go func(index int) {
      defer wg.Done()
      m.Store(index, fmt.Sprintf("value-%d", index))
    }(i)
  }

  wg.Wait()

  value, _ := m.Load(50)
  fmt.Println(value)
}

Результат выполнения кода:

go"value-50"

Смотрите также

  • метод sync.Map.Load,
    который загружает значение по ключу
  • метод sync.Map.LoadOrStore,
    который загружает значение или сохраняет новое
  • метод sync.Map.Delete,
    который удаляет значение по ключу
  • тип sync.Map,
    который представляет конкурентно-безопасную карту