Sobes.tech
Middle+

Kto by mal zatvoriť kanál?

sobes.tech AI

Odpoveď od AI

Ten, kto vytvoril kanál, by ho mal zatvoriť a už do neho nezasielať žiadne údaje. Je to dôležité na zabránenie paniky pri pokuse odoslať údaje na zatvorený kanál a aby príjemcovia mohli správne určiť koniec toku údajov.

Hlavné pravidlá:

  • Odosielateľ zatvorí kanál, keď už nebude odosielať hodnoty.
  • Príjemcovia by nemali zatvárať kanál.
  • Zatvorenie kanála signalizuje príjemcom, že žiadne nové údaje neprídu.

Príklad:

func výrobca(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch) // Zatvárame kanál po odoslaní všetkých údajov
}

func spotrebiteľ(ch <-chan int) {
    for val := range ch {
        fmt.Println(val)
    }
    // Keď je kanál zatvorený, cyklus končí
}

func main() {
    ch := make(chan int)
    go výrobca(ch)
    spotrebiteľ(ch)
}