Junior — Middle
Yopiq va to'ldirilmagan kanaldan o'qish uchun range ishlatilganda dastur qanday harakat qiladi?
sobes.tech AI
AIdan javob
Go'da kanal orqali o'qish uchun range ishlatilganda, sikl kanalni yopilguncha qiymatlarni oladi. Agar kanal yopilgan va undan barcha qiymatlar o'qilgan bo'lsa, range siklni yakunlaydi.
Buffersiz kanal uchun bu bufferli kanal bilan bir xil ishlaydi: agar kanal yopilgan bo'lsa, range bloklanmaydi va sikldan chiqadi.
Misol:
ch := make(chan int)
func() {
ch <- 1
ch <- 2
close(ch)
}()
for v := range ch {
fmt.Println(v) // 1 va 2 chiqaradi, so'ng sikl tugaydi
}
Agar kanal yopilgan bo'lsa, lekin unda ma'lumotlar bo'lmasa, range darhol tugaydi. Kanal yopilmagan bo'lsa va ma'lumotlar bo'lmasa, range kutadi (bloklanadi) ma'lumotlar kelguncha yoki kanal yopilguncha.