GoDasturchi
Select Statement: Multiplexing Channels

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:

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

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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:

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

Hints (0/3)

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