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
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
panicni 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.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
Yigish(c chan int) int funksiyasini yozing: for v := range c bilan channel yopilguncha barcha qiymatlarni o'qib, yig'indisini qaytarsin.
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).