Junior — Middle
Est-il possible de lire en toute sécurité les données d'une structure de données map sans risque d'erreurs?
sobes.tech IA
Réponse de l'IA
En Go, la lecture d'une carte est sûre si personne ne la modifie à ce moment-là. Cependant, si une écriture se produit en parallèle (ajout, suppression ou modification d'éléments), la lecture peut entraîner une panique (erreur d'exécution).
Pour lire en toute sécurité une carte dans un environnement multithread, on utilise généralement :
- sync.RWMutex — pour verrouiller la carte en écriture et permettre la lecture parallèle
- sync.Map — une structure de données spécialisée et sûre pour les cartes dans des environnements concurrents
Exemple avec 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
}
Ainsi, une lecture sûre est possible si la synchronisation avec l'écriture est assurée.