Sobes.tech
Intern

Омӯзиши харита дар Go бехатар аст?

sobes.tech AI

Ҷавоб аз AI

В езика Go, четенето от map не е безопасно за нишки, ако едновременно се извършва запис. За безопасно четене в многонишкова среда, трябва да се използва синхронизация, например sync.RWMutex за заключване при четене и писане, или sync.Map, който е специално разработен за конкурентен достъп.

Пример с sync.RWMutex:

import (
    "sync"
)

var (
    m  = make(map[string]int)
    mu sync.RWMutex
)

func read(key string) (int, bool) {
    mu.RLock()         // заключване за четене
    defer mu.RUnlock() // отключване
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()         // заключване за писане
    defer mu.Unlock() // отключване
    m[key] = val
}

Или използвайте sync.Map:

import "sync"

var m sync.Map

func read(key string) (interface{}, bool) {
    return m.Load(key)
}

func write(key string, val interface{}) {
    m.Store(key, val)
}

sync.Map е полезен, когато има много конкуриращи операции, но има особености по отношение на производителността и API-то.