Sobes.tech
Junior — Middle

Kiek kartų reikia uždaryti kanalą Go kalboje, kad išvengtumėte klaidų?

sobes.tech AI

Atsakymas iš AI

Go kalboje būtina kanalą uždaryti tik vieną kartą, kai daugiau duomenų siųsti neplanuojama. Kanalą kelis kartus uždaryti sukels paniką (runtime panic).

Svarbu:

  • Tą, kuris rašo į kanalą, turi jį uždaryti, o ne tas, kuris skaito.
  • Jei kanalas naudojamas duomenų perdavimui tarp gorutinių, uždarymas signalizuoja, kad daugiau duomenų nebus.

Pavyzdys:

ch := make(chan int)
func() {
    defer close(ch) // uždarome kanalą vieną kartą
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

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

Šiame pavyzdyje kanalas uždaromas vieną kartą po visų reikšmių siuntimo.