Sobes.tech
Middle+

Kdo by měl zavřít kanál?

sobes.tech AI

Odpověď od AI

Ten, kdo vytvořil kanál, by jej měl uzavřít a již do něj nezasílat data. Je to důležité, aby nedošlo k panice při pokusu o odeslání dat na uzavřený kanál a aby příjemci mohli správně určit konec toku dat.

Hlavní pravidla:

  • Odesílatel uzavře kanál, když již nebude posílat žádné hodnoty.
  • Příjemci by neměli kanál uzavírat.
  • Uzavření kanálu signalizuje příjemcům, že nová data již nepřijdou.

Příklad:

func producent(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch) // Uzavření kanálu po odeslání všech dat
}

func konzument(ch <-chan int) {
    for val := range ch {
        fmt.Println(val)
    }
    // Když je kanál uzavřen, cyklus končí
}

func main() {
    ch := make(chan int)
    go producent(ch)
    konzument(ch)
}