Junior — Middle
É possível fazer uma leitura segura de dados de uma estrutura de dados map sem risco de erros?
sobes.tech IA
Resposta da IA
No Go, a leitura de um mapa é segura se ninguém estiver a modificá-lo nesse momento. No entanto, se ocorrer uma escrita em paralelo (adição, remoção ou alteração de elementos), a leitura pode levar a um pânico (erro em tempo de execução).
Para ler de forma segura de um mapa em um ambiente multithread, geralmente usam-se:
- sync.RWMutex — para bloquear o mapa na escrita e permitir leitura paralela
- sync.Map — estrutura de dados especializada e segura para mapas
Exemplo com 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
}
Assim, a leitura segura é possível se garantir a sincronização com a escrita.