Buffered Channels: Adding Capacity
Buferlangan kanallar: sig'im qo'shish
Oddiy make(chan int) — sig'imi noldagi, buferlanmagan kanal: yuborish darhol qabul qiluvchini talab qiladi. make(chan int, N) esa buferlangan kanal yaratadi — u navbat kabi ishlaydi va hech kim qabul qilmasa ham N tagacha qiymatni saqlab turishi mumkin.
ch := make(chan int, 3)
ch <- 1 // bloklanmaydi — buferda joy bor
ch <- 2 // bloklanmaydi
ch <- 3 // bloklanmaydi, endi bufer to'ldi
// ch <- 4 shu yerda bloklanardi — biror kishi qabul qilgunchaBu — Composite Types kursidagi slice'ning cap (sig'im) tushunchasiga o'xshaydi: bufer — kanal ichidagi vaqtinchalik "joy". Bufer to'lgandan keyingi har qanday yuborish, qandaydir qiymat qabul qilinib bo'shliq ochilguncha kutadi.
>_ Exercise
FillBuffer(n int) []int funksiyasini yozing. n sig'imli buferlangan kanal yarating, 0 dan n-1 gacha bo'lgan har bir i uchun uning kvadratini kanalga yuboring (goroutinasiz — bufer yetarli bo'lgani uchun bloklanish bo'lmaydi), kanalni yoping, so'ngra range bilan barcha qiymatlarni slice'ga yig'ib qaytaring.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Buferlangan kanal (make(chan T, N)) yuboruvchiga qabul qiluvchini kutmasdan N tagacha qiymatni "navbatga qo'yish" imkonini beradi. Bufer to'lgach, yuborish yana buferlanmagan kanaldagidek bloklanadigan bo'lib qoladi.
NEXT UP
Channel Directions: Send-Only and Receive-Only
$ go run main.go
Kodingizni ishga tushiring