Middle+
Ki kell zárni a csatornát - a író vagy az olvasó?
sobes.tech MI
Válasz az MI-től
Go-ban a csatornát a küldő (sender) kell bezárja, nem a fogadó (receiver). A csatorna bezárása jelzi, hogy több érték nem lesz küldve, és az olvasók helyesen befejezhetik az olvasást, ha észlelik, hogy a csatorna zárt.
Ha az olvasó zárja be a csatornát, és a küldő tovább próbál küldeni, az pánikot (panic) okoz. Ezért a csatorna bezárásának felelőssége az író oldalán van.
Példa:
ch := make(chan int)
func() {
defer close(ch) // a küldő bezárja a csatornát
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // a zárásig olvas
}