Sobes.tech
Middle+

Kto by mal zatvoriť kanál - spisovateľ alebo čitateľ?

sobes.tech AI

Odpoveď od AI

V jazyku Go by mal byť kanál zatvorený odosielateľom (sender), nie prijímateľom (receiver). Zatvorenie kanála signalizuje, že nebudú odoslané žiadne ďalšie hodnoty, a čitatelia môžu správne ukončiť čítanie zistením, že kanál je zatvorený.

Ak čitateľ zatvorí kanál a odosielateľ bude pokračovať v pokusoch o odoslanie, spôsobí to paniku (panic). Preto je zodpovednosť za zatvorenie kanála na strane, ktorá ho píše.

Príklad:

ch := make(chan int)
func() {
    defer close(ch) // odosielateľ zatvorí kanál
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // číta do zatvorenia
}