Sobes.tech
Junior — Middle

O que acontece se tentar ler dados de um canal que atualmente não contém elementos?

sobes.tech IA

Resposta da IA

Em Go, se tentar ler de um canal que atualmente não contém elementos, o comportamento depende do tipo de canal:

  • Canal com buffer: se o buffer estiver vazio, a leitura bloqueia até que um elemento seja escrito no canal.
  • Canal sem buffer: a leitura bloqueia até que outra goroutine envie um valor.

Assim, ler de um canal vazio leva à bloqueio da goroutine atual até que haja dados ou o canal seja fechado.

Exemplo:

ch := make(chan int)

// Ler de um canal vazio bloqueará a execução
val := <-ch // bloqueia até que alguém envie um valor

// Para evitar o bloqueio, pode-se usar select com default
select {
case val := <-ch:
    fmt.Println("Recebido", val)
default:
    fmt.Println("Sem dados no canal")
}