Junior — Middle
Cât de confortabil vă simțiți lucrând cu funcția async.Map pentru operații asincrone?
sobes.tech AI
Răspuns de la AI
Biblioteca standardă Go nu are o funcție async.Map, dar există abordări similare pentru procesarea paralelă folosind goroutines și canale. De obicei, pentru aplicarea asincronă a unei funcții pe un slice, se folosesc goroutines și sync.WaitGroup pentru a porni operațiuni în paralel și a aștepta finalizarea acestora.
Exemplu de implementare a unui Map asincron:
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
}
// Utilizare
inputs := []int{1, 2, 3, 4}
outputs := asyncMap(inputs, func(x int) int { return x * 2 })
fmt.Println(outputs) // [2 4 6 8]
Această abordare permite paralelizarea eficientă a operațiilor, dar necesită o gestionare atentă a sincronizării și a gestionării erorilor.