Middle+
Ko treba da zatvori kanal - pisac ili čitalac?
sobes.tech АИ
Одговор од АИ
У Go, kanal treba zatvoriti od strane pošiljaoca (sender), a ne od strane primaoca (receiver). Zatvaranje kanala signalizira da više vrednosti neće biti poslato, i čitaoci mogu pravilno da završe čitanje prepoznavanjem zatvorenog kanala.
Ako čitalac zatvori kanal, a pošiljalac nastavi da pokušava da šalje, to će izazvati paniku (panic). Stoga je odgovornost za zatvaranje kanala na strani koja ga piše.
Primer:
ch := make(chan int)
func() {
defer close(ch) // pošiljalac zatvara kanal
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // čita do zatvaranja
}