Sobes.tech
Junior — Middle

Эгер учурда элементтерди камтыбаган каналдан маалымат окууга аракет кыласызбы, эмне болот?

sobes.tech AI

AIден жооп

Go тилинде, эгер сиз учурда эч кандай элементтер камтылбаган каналдан окууга аракет кыла турган болсоңуз, жүрүм-турум каналдын түрүнө жараша болот:

  • Буферлүү канал: эгер буфер бош болсо, окуу блоктолот, каналга элемент жазылгандан кийин гана.
  • Буферсиз канал: окуу башка горутинанын маанини жөнөтүшүнө чейин блоктолот.

Ошентип, бош каналдан окуу учурдагы горутинаны блоктоп, маалыматтар пайда болгонго чейин же канал жабылганга чейин күтөт.

Мисал:

ch := make(chan int)

// Бош каналдан окуу ишти токтотот
val := <-ch // кимдир бирөө маанини жөнөтмөйүнчө токтоп турат

// Токтоону алдын алуу үчүн, select менен default колдонсо болот
select {
case val := <-ch:
    fmt.Println("Алушу", val)
default:
    fmt.Println("Каналга маалымат жок")
}