Channel'lar
Channel'lar — qiymatlarni channel operatori <- yordamida yuborish va qabul qilish mumkin bo'lgan tipli quvur.
ch <- v // v ni ch channel'iga yuboramiz.
v := <-ch // ch dan qabul qilamiz va
// qiymatni v ga o'zlashtiramiz.
(Ma'lumotlar strelka yo'nalishi bo'yicha oqadi.)
Map va slice'lar kabi, channel'lar ham ishlatishdan oldin yaratilishi kerak:
ch := make(chan int)
Odatiy holda, yuborish va qabul qilish boshqa tomon tayyor bo'lguncha bloklanadi. Bu goroutine'larga aniq qulflar yoki shart o'zgaruvchilarisiz sinxronlashish imkonini beradi.
Misol kod slice'dagi sonlarni jamlaydi va ishni ikki goroutine o'rtasida taqsimlaydi. Ikkala goroutine o'z hisobini tugatgach, u yakuniy natijani hisoblaydi.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
Yig(s []int) int funksiyasini yozing: s ni ikkiga bo'lib (s[:len(s)/2] va s[len(s)/2:]), har bir yarmining yig'indisini alohida goroutine'da hisoblasin va natijalarni channel orqali olib qo'shsin. Masalan, Yig([]int{7, 2, 8, -9, 4, 0}) — 12.
Kvadrat(x int) int funksiyasini yozing: x*x ni goroutine ichida hisoblab, natijani channel'ga yuborsin, Kvadrat esa uni channel'dan qabul qilib qaytarsin.