Junior — Middle
Asinxron operatsiyalar uchun async.Map funksiyasi bilan ishlashda qanchalik qulay his qilasiz?
sobes.tech AI
AIdan javob
Go standart kutubxonada async.Map funksiyasi mavjud emas, lekin goroutine va kanallar yordamida parallel ishlash uchun o'xshash yondashuvlar mavjud. Odatiy holda, massivga funksiyani asinxron tarzda qo'llash uchun goroutine va sync.WaitGroup ishlatiladi, bu operatsiyalarni parallel tarzda boshlash va ularning yakunlanishini kutish uchun.
Asinxron Map ni amalga oshirish misoli:
func asyncMap(inputs []int, fn func(int) int) []int {
var wg sync.WaitGroup
results := make([]int, len(inputs))
for i, v := range inputs {
wg.Add(1)
go func(i, v int) {
defer wg.Done()
results[i] = fn(v)
}(i, v)
}
wg.Wait()
return results
}
// Foydalanish
inputs := []int{1, 2, 3, 4}
outputs := asyncMap(inputs, func(x int) int { return x * 2 })
fmt.Println(outputs) // [2 4 6 8]
Bu yondashuv operatsiyalarni samarali tarzda parallel qilish imkonini beradi, lekin sinxronizatsiya va xatolarni boshqarish ehtiyotkorlik bilan amalga oshirilishi kerak.