Sobes.tech
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
}