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.