Middle+
Kdo by měl zavřít kanál?
sobes.tech AI
Odpověď od AI
Ten, kdo vytvořil kanál, by jej měl uzavřít a již do něj nezasílat data. Je to důležité, aby nedošlo k panice při pokusu o odeslání dat na uzavřený kanál a aby příjemci mohli správně určit konec toku dat.
Hlavní pravidla:
- Odesílatel uzavře kanál, když již nebude posílat žádné hodnoty.
- Příjemci by neměli kanál uzavírat.
- Uzavření kanálu signalizuje příjemcům, že nová data již nepřijdou.
Příklad:
func producent(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch) // Uzavření kanálu po odeslání všech dat
}
func konzument(ch <-chan int) {
for val := range ch {
fmt.Println(val)
}
// Když je kanál uzavřen, cyklus končí
}
func main() {
ch := make(chan int)
go producent(ch)
konzument(ch)
}