Sobes.tech
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.