Sobes.tech
Junior — Middle

¿Podría explicar cómo funciona sync.Map en Go y en qué se diferencia de los mapas estándar?

sobes.tech AI

Respuesta de la IA

sync.Map en Go es un mapa seguro para concurrencia, diseñado para acceso concurrente sin necesidad de usar mutexes explícitos (sync.Mutex). A diferencia de un mapa map[K]V normal, que no es seguro para múltiples hilos y requiere sincronización externa, sync.Map implementa mecanismos internos para lectura y escritura seguros desde varias goroutines.

Características de sync.Map:

  • Optimizado para escenarios con lecturas frecuentes y escrituras ocasionales.
  • Utiliza estructuras y algoritmos internos (por ejemplo, copia al escribir) para minimizar bloqueos.
  • Proporciona métodos Load, Store, LoadOrStore, Delete y Range.

Ejemplo de uso:

var m sync.Map

// Escribir un valor
m.Store("key", "value")

// Obtener un valor
if val, ok := m.Load("key"); ok {
    fmt.Println(val)
}

// Eliminar un valor
m.Delete("key")

// Iterar sobre los elementos
m.Range(func(k, v interface{}) bool {
    fmt.Println(k, v)
    return true // continuar iterando
})

De esta forma, sync.Map es útil cuando necesitas trabajar rápida y seguramente con un mapa compartido en un entorno multihilo, sin preocuparte por mutexes. Sin embargo, para escenarios con escrituras frecuentes y lógica compleja, es mejor usar mapas normales con sincronización explícita.