Sobes.tech
Junior — Middle

Como deve ser feita corretamente a leitura de dados de um canal sem buffer?

sobes.tech IA

Resposta da IA

Em Go, para ler dados de um canal sem buffer, deve-se usar uma leitura não bloqueante ou uma leitura com controlo de disponibilidade de dados. Os canais por padrão podem ser com ou sem buffer, mas para ler sem buffer, geralmente usam-se canais sem buffer e leitura com o operador <-.

Exemplo de leitura de um canal sem buffer:

ch := make(chan int) // canal sem buffer

// Envio numa goroutine separada
go func() {
    ch <- 42
}()

// Leitura (espera até os dados estarem disponíveis)
value := <-ch
fmt.Println(value) // 42

Para evitar bloqueio na leitura, pode-se usar a construção com select e default:

select {
case val := <-ch:
    fmt.Println("Recebido", val)
default:
    fmt.Println("Sem dados")
}