Sobes.tech
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.