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,DeleteeRange.
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.