Junior — Middle
¿Es posible realizar una lectura segura de datos desde una estructura de datos map sin riesgo de errores?
sobes.tech AI
Respuesta de la IA
En Go, la lectura de un mapa es segura si en ese momento nadie lo está modificando. Sin embargo, si se realiza una escritura en paralelo (agregar, eliminar o modificar elementos), la lectura puede provocar un pánico (error en tiempo de ejecución).
Para leer de manera segura de un mapa en un entorno multihilo, generalmente se utilizan:
- sync.RWMutex — para bloquear el mapa en escritura y permitir lectura paralela
- sync.Map — estructura de datos especializada y segura para mapas en entornos concurrentes
Ejemplo 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
}
De esta forma, la lectura segura es posible si se garantiza la sincronización con la escritura.