Sobes.tech
Junior — Middle

Poderia explicar o funcionamento do sync.Map em Go e como ele difere dos mapas padrão?

sobes.tech IA

Resposta da IA

O sync.Map em Go é um mapa (map) seguro para concorrência, projetado para acesso concorrente sem a necessidade de usar mutexes explícitos (sync.Mutex). Ao contrário de um mapa map[K]V normal, que não é seguro para múltiplas goroutines e requer sincronização externa, o sync.Map implementa mecanismos internos para leitura e escrita seguras de várias goroutines.

Características do sync.Map:

  • Otimizado para cenários com leituras frequentes e gravações ocasionais.
  • Utiliza estruturas e algoritmos internos (por exemplo, cópia ao gravar) para minimizar bloqueios.
  • Fornece métodos Load, Store, LoadOrStore, Delete e Range.

Exemplo de uso:

var m sync.Map

// Gravar valor
m.Store("key", "value")

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

// Remover valor
m.Delete("key")

// Iterar sobre os elementos
m.Range(func(k, v interface{}) bool {
    fmt.Println(k, v)
    return true // continuar a iteração
})

Assim, o sync.Map é útil quando precisa trabalhar de forma rápida e segura com um mapa compartilhado em um ambiente multithread, sem se preocupar com mutexes. No entanto, para cenários com gravações frequentes e lógica complexa, é melhor usar mapas normais com sincronização explícita.