Avatar ·

É 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?