Sobes.tech
Junior — Middle

Kā uzvedas programma, izmantojot range, lai lasītu no slēgta, nebuferēta kanāla?

sobes.tech AI

Atbilde no AI

Izmantojot range, lai lasītu no kanāla Go valodā, cikls saņems vērtības no kanāla līdz brīdim, kad tas tiks slēgts. Ja kanāls ir slēgts un visas vērtības jau ir nolasītas, range beigs ciklu.

Nepiepildītam kanālam tas darbojas tāpat kā piepildītam: ja kanāls ir slēgts, range neblokēsies un izies no cikla.

Piemērs:

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

for v := range ch {
    fmt.Println(v) // Izvadīs 1 un 2, pēc tam cikls beigsies
}

Ja kanāls ir slēgts, bet tajā nav datu, range uzreiz beigsies. Ja kanāls nav slēgts, bet datu nav, range gaidīs (blokusies) līdz datu parādīšanās vai kanāla slēgšanai.