Sobes.tech
Junior — Middle

Kui mugav on teil töötada async.Map funktsiooniga asünkroonsete operatsioonide jaoks?

sobes.tech AI

Vastus AI-lt

Go standardteegis ei ole funktsiooni async.Map, kuid sarnased lähenemised paralleelseks töötlemiseks goroutine'ide ja kanalite abil on olemas. Tavaliselt kasutatakse goroutine'e ja sync.WaitGroup'i, et käivitada operatsioone paralleelselt ja oodata nende lõpetamist.

Näide asünkroonsest Map'i implementatsioonist:

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
}

// Kasutus
inputs := []int{1, 2, 3, 4}
outputs := asyncMap(inputs, func(x int) int { return x * 2 })
fmt.Println(outputs) // [2 4 6 8]

See lähenemine võimaldab tõhusalt paralleelselt teostada operatsioone, kuid nõuab hoolikat sünkroniseerimise ja vigade haldamise korraldust.