Junior — Middle
Jak často je třeba v Go zavřít kanál, aby se předešlo chybám?
sobes.tech AI
Odpověď od AI
V jazyce Go je třeba kanál uzavřít přesně jednou, když již nehodláte do něj posílat žádná data. Opakované uzavření kanálu povede k panice (runtime panic).
Důležité:
- Ten, kdo do kanálu píše, by ho měl uzavřít, nikoliv ten, kdo čte.
- Pokud je kanál používán k přenosu dat mezi gorutinami, uzavření signalizuje, že již nebudou žádná data.
Příklad:
ch := make(chan int)
func() {
defer close(ch) // uzavřeme kanál jednou
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val)
}
V tomto příkladu je kanál uzavřen jednou po odeslání všech hodnot.