Middle+
Kto by mal zatvoriť kanál?
sobes.tech AI
Odpoveď od AI
Ten, kto vytvoril kanál, by ho mal zatvoriť a už do neho nezasielať žiadne údaje. Je to dôležité na zabránenie paniky pri pokuse odoslať údaje na zatvorený kanál a aby príjemcovia mohli správne určiť koniec toku údajov.
Hlavné pravidlá:
- Odosielateľ zatvorí kanál, keď už nebude odosielať hodnoty.
- Príjemcovia by nemali zatvárať kanál.
- Zatvorenie kanála signalizuje príjemcom, že žiadne nové údaje neprídu.
Príklad:
func výrobca(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch) // Zatvárame kanál po odoslaní všetkých údajov
}
func spotrebiteľ(ch <-chan int) {
for val := range ch {
fmt.Println(val)
}
// Keď je kanál zatvorený, cyklus končí
}
func main() {
ch := make(chan int)
go výrobca(ch)
spotrebiteľ(ch)
}