É permitido deixar um canal em Go aberto após a conclusão de uma goroutine?
Olá a todos! Sou um desenvolvedor Go iniciante e estou tentando entender os canais. Tenho o seguinte código:
```go
package main
import (
"fmt"
"time"
)
func worker(done chan bool) {
fmt.Println("Trabalhando...")
time.Sleep(2 * time.Second)
fmt.Println("Pronto!")
// Aqui eu não fecho o canal
done <- true
}
func main() {
done := make(chan bool)
go worker(done)
// Aguardando o resultado
result := <-done
fmt.Println("Resultado:", result)
// O que acontece com o canal done? Ele permanece aberto.
time.Sleep(1 * time.Second)
fmt.Println("Programa finalizado")
}
```
O código funciona, mas notei que nunca fecho o canal `done`. Na documentação diz que os canais precisam ser fechados, mas não entendo se isso é obrigatório. No meu exemplo, o programa termina e o canal simplesmente desaparece. Mas e se o programa rodar por muito tempo e eu criar muitos desses canais? Isso não causaria vazamento de memória ou outros problemas? Existem regras sobre quando um canal deve ser fechado?