Sobes.tech
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]

Αυτή η προσέγγιση επιτρέπει την αποτελεσματική παράλληλη εκτέλεση λειτουργιών, αλλά απαιτεί προσεκτικό χειρισμό συγχρονισμού και διαχείρισης σφαλμάτων.