Sobes.tech
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")
}