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]
Αυτή η προσέγγιση επιτρέπει την αποτελεσματική παράλληλη εκτέλεση λειτουργιών, αλλά απαιτεί προσεκτικό χειρισμό συγχρονισμού και διαχείρισης σφαλμάτων.