Middle+
Kas turėtų uždaryti kanalą - rašytojas ar skaitytojas?
sobes.tech AI
Atsakymas iš AI
Go kalboje kanalas turi būti uždaromas siuntėjo (sender), o ne gavėjo (receiver). Kanalo uždarymas signalizuoja, kad daugiau reikšmių nebus siunčiama, ir skaitytojai gali teisingai užbaigti skaitymą, aptikdami uždarytą kanalą.
Jei skaitytojas uždarys kanalą, o siuntėjas toliau bandys siųsti, tai sukels paniką (panic). Todėl atsakomybė už kanalo uždarymą tenka jo rašytojui.
Pavyzdys:
ch := make(chan int)
func() {
defer close(ch) // siuntėjas uždaro kanalą
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // skaito iki uždarymo
}