Junior — Middle
Mennyire érzi magát kényelmesen az async.Map funkcióval való munkában aszinkron műveletekhez?
sobes.tech MI
Válasz az MI-től
A Go standard könyvtárban nincs async.Map függvény, de hasonló megközelítések léteznek goroutine-ok és csatornák segítségével történő párhuzamos feldolgozásra. Általában, egy szeletre alkalmazott függvény aszinkron végrehajtásához goroutine-okat és sync.WaitGroup-ot használnak, hogy párhuzamosan indítsák el az műveleteket, és várják azok befejezését.
Példa egy aszinkron Map implementációjára:
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
}
// Használat
inputs := []int{1, 2, 3, 4}
outputs := asyncMap(inputs, func(x int) int { return x * 2 })
fmt.Println(outputs) // [2 4 6 8]
Ez a megközelítés hatékonyan párhuzamosítja a műveleteket, de gondos szinkronizációt és hibakezelést igényel.