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.