Метод sync.Map.Load
Метод sync.Map.Load позволяет безопасно читать значение из конкурентной карты sync.Map. В первый параметр метод принимает ключ типа any, по которому нужно получить значение. Метод возвращает два значения: само значение типа any и булев флаг, который показывает, существует ли ключ в карте. Если ключа нет, возвращается нулевое значение для типа и false.
Синтаксис
value, ok := m.Load(key)
Пример
Давайте создадим карту sync.Map, сохраним в нее значение и прочитаем его методом Load:
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
// Сохраняем значение по ключу "name"
m.Store("name", "John")
// Читаем значение по ключу
value, ok := m.Load("name")
fmt.Println(value, ok)
}
Результат выполнения кода:
"John" true
Пример
Давайте попробуем прочитать значение по несуществующему ключу:
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
// Читаем значение по несуществующему ключу
value, ok := m.Load("age")
fmt.Println(value, ok)
}
Результат выполнения кода:
<nil> false
Пример
Давайте продемонстрируем, что метод Load безопасно использовать одновременно из нескольких горутин:
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
var wg sync.WaitGroup
// Сохраняем значение
m.Store("counter", 42)
// Запускаем 10 горутин для чтения
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
value, ok := m.Load("counter")
if ok {
fmt.Printf("Read: %d\n", value)
}
}()
}
wg.Wait()
}
Результат выполнения кода:
"Read: 42"
"Read: 42"
"Read: 42"
"Read: 42"
"Read: 42"
"Read: 42"
"Read: 42"
"Read: 42"
"Read: 42"
"Read: 42"
Смотрите также
-
метод
sync.Map.Store,
который сохраняет значение по ключу в карте -
метод
sync.Map.LoadOrStore,
который загружает или сохраняет значение -
метод
sync.Map.LoadAndDelete,
который загружает и удаляет значение -
метод
sync.Map.Delete,
который удаляет значение по ключу