Sobes.tech
Junior — Middle

V ktorom mieste v kóde je potrebné zatvoriť kanál?

sobes.tech AI

Odpoveď od AI

V Go by mal byť kanál uzavretý na mieste, kde je vytvorený, a kde sa už neplánuje odosielať dáta. Zvyčajne to robí odosielateľ, aby signalizoval príjemcom, že viac dát nebude.

Dôležité:

  • Prijímatelia môžu pri čítaní skontrolovať uzavretie kanála.
  • Kanál by mal uzavrieť iba odosielateľ, aby sa predišlo panike.

Príklad:

ch := make(chan int)
func() {
    defer close(ch) // zatvárame kanál po odoslaní všetkých dát
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val) // prijímame dáta, kým sa kanál nezavrie
}