Junior — Middle
Ինչքան հարմարավետ եք աշխատում async.Map ֆունկցիայի հետ ասինխրոնային գործողությունների համար:
sobes.tech AI
Պատասխան AI-ից
Go-ի ստանդարտ գրադարանում չկա async.Map ֆունկցիա, բայց կան նման մոտեցումներ հապաղման պրոցեսների համար goroutines և канալների միջոցով: Սովորաբար, որպես անսինխրոն կիրառման ֆունկցիա slice-ի վրա, օգտագործվում են 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]
Այս մոտեցումը թույլ է տալիս արդյունավետորեն պառալել գործառույթները, բայց պահանջում է զգուշավոր կառավարում սինխրոնիզացիայի և սխալների կառավարման համար։