Junior — Middle
Hozirda elementlar mavjud bo'lmagan kanaldan ma'lumot o'qishga urinsangiz nima bo'ladi?
sobes.tech AI
AIdan javob
Go tilida, agar hozirda elementlar mavjud bo'lmagan kanalni o'qishga harakat qilsangiz, xulq-atvor kanalning turiga bog'liq:
- Bufferli kanal: agar buffer bo'sh bo'lsa, o'qish bloklanadi, kanalga element yozilguncha.
- Buffersiz kanal: o'qish boshqa gorutina qiymat yuborganiga qadar bloklanadi.
Shunday qilib, bo'sh kanaldan o'qish joriy gorutina bloklanishiga olib keladi, ma'lumotlar yoki kanali yopilguncha.
Misol:
ch := make(chan int)
// Bo'sh kanaldan o'qish bajarilishini bloklaydi
val := <-ch // kimdir qiymat yubormaguncha bloklanadi
// Bloklanishni oldini olish uchun, select bilan default ishlatish mumkin
select {
case val := <-ch:
fmt.Println("Qabul qilindi", val)
default:
fmt.Println("Kanalda ma'lumot yo'q")
}