Sobes.tech
Middle+

Quem deve fechar o canal - o escritor ou o leitor?

sobes.tech IA

Resposta da IA

No Go, o canal deve ser fechado pelo remetente (sender), não pelo receptor (receiver). Fechar o canal sinaliza que não serão enviados mais valores, e os leitores podem terminar a leitura corretamente ao detectar o canal fechado.

Se o leitor fechar o canal e o remetente continuar tentando enviar, isso causará um pânico (panic). Portanto, a responsabilidade de fechar o canal recai sobre quem o escreve.

Exemplo:

ch := make(chan int)
func() {
    defer close(ch) // o remetente fecha o canal
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // o leitor lê até o canal ser fechado
}