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