Middle+
Cine trebuie să închidă canalul - scriitorul sau cititorul?
sobes.tech AI
Răspuns de la AI
În Go, canalul trebuie închis de către expeditor (sender), nu de către receptor (receiver). Închiderea canalului semnalează că nu vor mai fi trimise valori, iar cititorii pot termina corect citirea detectând canalul închis.
Dacă cititorul închide canalul și expeditorul continuă să încerce să trimită, va apărea o panică (panic). Prin urmare, responsabilitatea pentru închiderea canalului revine părții care îl scrie.
Exemplu:
ch := make(chan int)
func() {
defer close(ch) // expeditorul închide canalul
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // citește până la închidere
}