Junior — Middle
Hogyan viselkedik a program, amikor range-et használ zárt, nem pufferelt csatornából olvasásra?
sobes.tech MI
Válasz az MI-től
Go-ban, amikor range-et használunk egy csatornáról való olvasáshoz, a ciklus értékeket kap a csatornáról, amíg az be nem zárul. Ha a csatorna zárva van, és minden érték olvasva lett, a range befejezi a ciklust.
A nem pufferelt csatornára ugyanez igaz, mint a puffereltre: ha a csatorna zárva van, a range nem blokkol és kilép a ciklusból.
Példa:
ch := make(chan int)
func() {
ch <- 1
ch <- 2
close(ch)
}()
for v := range ch {
fmt.Println(v) // Kiírja 1 és 2, majd a ciklus véget ér
}
Ha a csatorna zárva van, de nincs benne adat, a range azonnal befejeződik. Ha a csatorna nincs zárva, de nincs benne adat, a range vár (blokkol) addig, amíg adat nem érkezik vagy a csatorna be nem zárul.