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 rangeou verificarokpara 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.