Buferli channel'lar
Channel'lar buferli (buffered) bo'lishi mumkin. Buferli channel'ni initsializatsiya qilish uchun bufer uzunligini make ning ikkinchi argumenti sifatida bering:
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.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
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].
BoshJoy(ch chan int) int funksiyasini yozing: buferli channel'da yana nechta qiymat sig'ishini (cap(ch) - len(ch)) qaytarsin.