Sobes.tech
Junior — Middle

Como garantir uma escrita segura de dados num canal a partir de várias goroutines sem usar bloqueio?

sobes.tech IA

Resposta da IA

Em Go, para escrever dados de forma segura em um canal a partir de várias goroutines sem usar bloqueios, geralmente basta usar o próprio canal, pois os canais em Go são seguros para concorrência por padrão.

Exemplo:

ch := make(chan int)

// Escrita no canal de várias goroutines
for i := 0; i < 5; i++ {
    go func(val int) {
        ch <- val // escrita segura
    }(i)
}

// Leitura do canal
for i := 0; i < 5; i++ {
    fmt.Println(<-ch)
}

Se precisar garantir que a escrita não bloqueie, pode usar um canal com buffer. Assim, bloqueios manuais não são necessários, pois o canal fornece sincronização.