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
}