Sobes.tech
Junior — Middle

Kuidas käitub programm, kasutades range'i, et lugeda suletud, mitte-pufferdatud kanalilt?

sobes.tech AI

Vastus AI-lt

Kasutades range lugemiseks kanalist Go keeles, saab tsükkel väärtusi kanalilt kuni selle sulgemiseni. Kui kanal on suletud ja kõik väärtused on juba loetud, lõpetab range tsükli.

Ilma pufferita kanal töötab sama moodi nagu pufferiga: kui kanal on suletud, range ei blokeeru ja väljub tsüklist.

Näide:

ch := make(chan int)
func() {
    ch <- 1
    ch <- 2
    close(ch)
}()

for v := range ch {
    fmt.Println(v) // Kuvab 1 ja 2, siis lõpeb tsükkel
}

Kui kanal on suletud, kuid selles pole andmeid, lõpeb range kohe. Kui kanal ei ole suletud, kuid andmeid pole, ootab range (blokeerib) kuni andmed saabuvad või kanal suletakse.