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.