GoDasturchi
Select: Waiting on Multiple Channels

Select: Waiting on Multiple Channels

Select: bir nechta kanalni kutish

select — bir nechta kanal amalidan qay biri birinchi tayyor bo'lsa, o'shani tanlaydigan boshqaruv tuzilmasi. Sintaksisi The Clean Switch darsidagi switchka o'xshaydi, lekin shartlar o'rniga kanal amallarini solishtiradi:

example.go
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 andaza — kanalni bloklanmasdan tekshirish uchun juda foydali: "agar tayyor bo'lsa oling, bo'lmasa davom eting".

>_ 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.

Hints (0/3)

Key Takeaway

Key Takeaway:

select bir nechta kanal amalidan birini tanlaydi. default bo'limi uni bloklanmaydigan qiladi — bu kanalni "bor-yo'qligini tekshirib ko'rish" uchun standart andaza, real vaqt tizimlarida juda tez-tez ishlatiladi.

NEXT UP

Mutexes: Protecting Shared State

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Select: Waiting on Multiple Channels

Select: bir nechta kanalni kutish

select — bir nechta kanal amalidan qay biri birinchi tayyor bo'lsa, o'shani tanlaydigan boshqaruv tuzilmasi. Sintaksisi The Clean Switch darsidagi switchka o'xshaydi, lekin shartlar o'rniga kanal amallarini solishtiradi:

example.go
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 andaza — kanalni bloklanmasdan tekshirish uchun juda foydali: "agar tayyor bo'lsa oling, bo'lmasa davom eting".

>_ 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.

Hints (0/3)

Key Takeaway

Key Takeaway:

select bir nechta kanal amalidan birini tanlaydi. default bo'limi uni bloklanmaydigan qiladi — bu kanalni "bor-yo'qligini tekshirib ko'rish" uchun standart andaza, real vaqt tizimlarida juda tez-tez ishlatiladi.

NEXT UP

Mutexes: Protecting Shared State