Middle+
Qui doit fermer le canal : l'écrivain ou le lecteur ?
sobes.tech IA
Réponse de l'IA
En Go, le canal doit être fermé par l'expéditeur (sender), pas par le récepteur (receiver). La fermeture du canal indique qu'aucune valeur supplémentaire ne sera envoyée, et les lecteurs peuvent terminer la lecture en toute sécurité en détectant que le canal est fermé.
Si le lecteur ferme le canal et que l'expéditeur continue à tenter d'envoyer, cela provoquera une panique (panic). Par conséquent, la responsabilité de fermer le canal incombe à celui qui l'écrit.
Exemple:
ch := make(chan int)
func() {
defer close(ch) // l'expéditeur ferme le canal
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // le lecteur lit jusqu'à la fermeture
}