Sobes.tech
Senior

O que acontece ao ler de um canal fechado em Go?

sobes.tech IA

Resposta da IA

Ao ler de um canal fechado em Go, o seguinte acontece:

  • Se houver dados no canal, eles serão lidos normalmente.
  • Se o canal estiver fechado e não houver dados, a operação de leitura retornará o valor zero do tipo do canal e false no segundo valor retornado (se usar a forma com dois valores de retorno).

Exemplo:

ch := make(chan int)
close(ch)

v, ok := <-ch
fmt.Println(v, ok) // Vai imprimir: 0 false

Isso permite determinar que o canal está fechado e não haverá mais dados. Ao ler de um canal fechado sem dados, a goroutine não bloqueia e recebe imediatamente o valor zero.

Se ler de um canal fechado sem verificar o segundo valor, pode obter valores nulos, o que é importante considerar na lógica de processamento.