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