Sobes.tech
Junior — Middle

È possibile leggere in modo sicuro i dati da una struttura dati map senza rischi di errori?

sobes.tech AI

Risposta dell'AI

In Go, la lettura di una mappa è sicura se in quel momento nessuno la sta modificando. Tuttavia, se si verifica una scrittura in parallelo (aggiunta, rimozione o modifica di elementi), la lettura può causare un panic (errore di runtime).

Per leggere in modo sicuro da una mappa in un ambiente multithread, si usano generalmente:

  • sync.RWMutex — per bloccare la mappa in scrittura e consentire la lettura parallela
  • sync.Map — una struttura dati specializzata e sicura per le mappe

Esempio con RWMutex:

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
}

In questo modo, la lettura sicura è possibile se si garantisce la sincronizzazione con la scrittura.