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")
}