Peut-on laisser un canal Go ouvert après la fin de l'exécution d'une goroutine ?
Bonjour à tous ! Je suis un développeur Go débutant et j'essaie de comprendre les canaux. J'ai ce code :
```go
package main
import (
"fmt"
"time"
)
func worker(done chan bool) {
fmt.Println("Je travaille...")
time.Sleep(2 * time.Second)
fmt.Println("Prêt !")
// Ici, je ne ferme pas le canal
done <- true
}
func main() {
done := make(chan bool)
go worker(done)
// On attend le résultat
result := <-done
fmt.Println("Résultat :", result)
// Qu'arrive-t-il au canal done ? Il reste ouvert.
time.Sleep(1 * time.Second)
fmt.Println("Programme terminé")
}
```
Le code fonctionne, mais j'ai remarqué que je ne ferme jamais le canal `done`. Dans la documentation, il est dit qu'il faut fermer les canaux, mais je ne comprends pas si c'est obligatoire. Dans mon exemple, le programme se termine et le canal disparaît tout simplement. Mais que se passe-t-il si le programme tourne longtemps et que je crée beaucoup de ces canaux ? Cela ne va-t-il pas entraîner des fuites de mémoire ou d'autres problèmes ? Existe-t-il des règles pour savoir quand un canal doit être fermé ?