Peut-on laisser un canal ouvert en Go ? Conséquences et bonnes pratiques
Bonjour à tous ! Je viens de commencer à apprendre Go et j'écris un petit service pour traiter des tâches. J'ai une goroutine worker qui lit depuis un canal et traite les messages. J'ai remarqué que si la fonction principale se termine, mais que le canal reste ouvert — le programme ne plante pas, il se termine simplement silencieusement. Mais je ne suis pas sûr que ce soit normal.
Voici un exemple simplifié de ce que je fais :
```go
package main
import "fmt"
func worker(tasks <-chan int) {
for task := range tasks {
fmt.Println("Tâche traitée :", task)
}
}
func main() {
tasks := make(chan int)
go worker(tasks)
tasks <- 1
tasks <- 2
tasks <- 3
// Je ne ferme pas le canal, et le programme se termine.
// Est-ce normal de faire cela ?
}
```
J'ai lu qu'en Go, le garbage collector ne ferme pas les canaux, et qu'il faut les fermer explicitement. Mais dans mon exemple, le programme fonctionne et se termine sans erreur. Quand j'ajoute `close(tasks)`, la goroutine worker se termine immédiatement après avoir traité le dernier élément.
No answers yet.
Connectez-vous pour laisser une réponse
Blogs