Sobes.tech
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.