Sobes.tech
Junior — Middle

Kako se ponaša program kada koristi range za čitanje iz zatvorenog, nebuferskog kanala?

sobes.tech АИ

Одговор од АИ

Kada koristite range za čitanje iz kanala u Go, petlja će primati vrednosti iz kanala dok se on ne zatvori. Ako je kanal zatvoren i sve vrednosti su već pročitane, range će završiti petlju.

Za nebufferirani kanal, ovo funkcioniše isto kao i za bufferirani: ako je kanal zatvoren, range se ne blokira i izlazi iz petlje.

Primer:

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

for v := range ch {
    fmt.Println(v) // Ispisaće 1 i 2, zatim će petlja završiti
}

Ako je kanal zatvoren, ali nema podataka, range će se odmah završiti. Ako kanal nije zatvoren, ali nema podataka, range će čekati (blokirati se) dok se ne pojave podaci ili se kanal ne zatvori.