Sobes.tech
Junior — Middle

Чӣ қадар бароҳат ҳастед, ки бо функсияи async.Map барои амалҳои асинхронӣ кор кунед?

sobes.tech AI

Ҷавоб аз AI

Дар китобхонаи стандартии Go функсияи async.Map вуҷуд надорад, аммо роҳҳои монанд барои коркарди параллелӣ бо ёрии goroutines ва каналҳо мавҷуданд. Одатан, барои татбиқи асинхронӣ функсия ба срез, goroutines ва sync.WaitGroup истифода мешаванд, то ки амалҳоро параллелона оғоз кунанд ва интизор шаванд, ки онҳо ба анҷом расанд.

Маслиҳат барои татбиқи Map-и асинхронӣ:

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
}

// Истифода
inputs := []int{1, 2, 3, 4}
outputs := asyncMap(inputs, func(x int) int { return x * 2 })
fmt.Println(outputs) // [2 4 6 8]

Ин усул имкон медиҳад, ки амалҳоро самаранок параллелона анҷом диҳед, аммо ниёз ба идоракунии эҳтиётӣ дар бораи синхронӣ ва идоракунии хатоҳо дорад.