Sobes.tech
Junior — Middle

Ako často je potrebné zatvoriť kanál v Go, aby sa predišlo chybám?

sobes.tech AI

Odpoveď od AI

V jazyku Go je potrebné kanál uzavrieť presne raz, keď už neplánujete do neho posielať žiadne dáta. Opakované zatváranie kanála povedie k panike (runtime panic).

Dôležité:

  • Ten, kto píše do kanála, by ho mal uzavrieť, nie ten, kto číta.
  • Ak sa kanál používa na prenos dát medzi gorutinami, zatvorenie signalizuje, že žiadne ďalšie dáta nebudú.

Príklad:

ch := make(chan int)
func() {
    defer close(ch) // zatvárame kanál raz
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val)
}

V tomto príklade je kanál zatvorený raz po odoslaní všetkých hodnôt.