95 / 103

Buffered Channels

Buferli channel'lar

Channel'lar buferli (buffered) bo'lishi mumkin. Buferli channel'ni initsializatsiya qilish uchun bufer uzunligini make ning ikkinchi argumenti sifatida bering:

example.go
ch := make(chan int, 100)

Buferli channel'ga yuborish faqat bufer to'lganda bloklanadi. Qabul qilish esa bufer bo'sh bo'lganda bloklanadi.

Misolni buferni to'ldirib yuboradigan qilib o'zgartiring va nima bo'lishini ko'ring.

Topshiriqlar

Yechimni kodning pastki qismidagi Topshiriqlar bo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.

1-topshiriq

BuferBilan(vals []int) []int funksiyasini yozing: sig'imi len(vals) bo'lgan buferli channel yarating, barcha qiymatlarni (goroutine'siz!) unga yuboring, so'ng hammasini qabul qilib, shu tartibda slice qilib qaytarsin. Masalan, BuferBilan([]int{1, 2, 3}) — [1 2 3].

2-topshiriq

BoshJoy(ch chan int) int funksiyasini yozing: buferli channel'da yana nechta qiymat sig'ishini (cap(ch) - len(ch)) qaytarsin.