Sobes.tech
Junior — Middle

Quais são as consequências de não fechar o canal após o uso?

sobes.tech IA

Resposta da IA

Se não fechar o canal em Go após usá-lo, podem ocorrer as seguintes consequências:

  • Bloqueios de goroutines: Se outras goroutines aguardam dados do canal e ele não estiver fechado, podem esperar indefinidamente, pois não receberão sinal de fim.
  • Fugas de recursos: Embora o próprio canal não exija liberação explícita de memória, um canal não fechado pode causar erros lógicos e bloqueios no programa.
  • Impossibilidade de tratar corretamente o fim da transmissão: Um canal fechado permite usar construções como for range ou verificar ok para determinar que os dados terminaram. Sem fechamento, isso não é possível.

Exemplo de fechamento correto do canal:

ch := make(chan int)
go func() {
    defer close(ch)
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for v := range ch {
    fmt.Println(v)
}

Aqui, o canal é fechado após enviar todos os valores, permitindo que o ciclo range termine corretamente.