Select Statement: Multiplexing Channels
Select: kanallarni multipleksatsiya qilish
select — bir nechta kanalni bir vaqtda kuzatib, qay biri birinchi tayyor bo'lsa o'shani tanlaydigan boshqaruv tuzilmasi — ya'ni kanallarni multipleksatsiya qilish. Sintaksisi The Clean Switch darsidagi switchka o'xshaydi, lekin shartlar o'rniga kanal amallarini kuzatadi:
select {
case v := <-ch1:
fmt.Println("ch1 dan:", v)
case v := <-ch2:
fmt.Println("ch2 dan:", v)
default:
fmt.Println("hech biri tayyor emas")
}default bo'limi bo'lmasa, select biror kanal tayyor bo'lguncha bloklanadi. default bilan esa u hech qachon bloklanmaydi — agar hech qanday kanal tayyor bo'lmasa, darhol defaultni bajaradi. Bu naqsh — kanalni bloklanmasdan tekshirish uchun juda foydali: "agar tayyor bo'lsa oling, bo'lmasa davom eting", va real tizimlarda ko'plab kanallarni bir vaqtda kuzatishning eng sodda ko'rinishidir.
>_ Exercise
DrainNonBlocking(ch chan int) []int funksiyasini yozing. Cheksiz tsiklda select ishlatib: agar kanaldan qiymat olish mumkin bo'lsa, uni natijalar slice'iga qo'shing; aks holda (default) to'plangan natijalarni qaytarib, funksiyani tugating.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
select bir nechta kanal amalidan birini tanlaydi, va aynan shu "bir nechtasini birdek kuzatish" xususiyati multipleksatsiya deyiladi. default bo'limi uni bloklanmaydigan qiladi — bu kanalni "bor-yo'qligini tekshirib ko'rish" uchun standart andaza.
NEXT UP
Context Package: Cancellation and Timeouts
$ go run main.go
Kodingizni ishga tushiring