96 / 103

Range and Close

Range va Close

Yuboruvchi boshqa qiymat yuborilmasligini bildirish uchun channel'ni close qilishi mumkin. Qabul qilayotgan tomon channel yopilganini qabul qilish ifodasiga ikkinchi o'zgaruvchi berish orqali tekshirishi mumkin: quyidagidan keyin

example.go
v, ok := <-ch

qabul qilinadigan qiymatlar qolmagan va channel yopilgan bo'lsa, ok false bo'ladi.

for i := range c sikli channel yopilguncha undan qiymatlarni qayta-qayta qabul qiladi.

Eslatma: channel'ni faqat yuboruvchi yopishi kerak, hech qachon qabul qilayotgan tomon emas. Yopilgan channel'ga yuborish panic ni keltirib chiqaradi.

Yana bir eslatma: channel'lar fayllarga o'xshamaydi; ularni odatda yopish shart emas. Yopish faqat qabul qilayotgan tomonga boshqa qiymatlar kelmasligini aytish zarur bo'lgandagina kerak, masalan range siklini tugatish uchun.

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

Yigish(c chan int) int funksiyasini yozing: for v := range c bilan channel yopilguncha barcha qiymatlarni o'qib, yig'indisini qaytarsin.

2-topshiriq

Ishlab(n int) chan int funksiyasini yozing: yangi channel qaytarsin; alohida goroutine unga 0, 1, ..., n-1 qiymatlarini yuborib, so'ng channel'ni close qilsin (n == 0 bo'lsa darhol yopilsin).