Sobes.tech
Junior — Middle

Quanto ti senti a tuo agio nel lavorare con la funzione async.Map per operazioni asincrone?

sobes.tech AI

Risposta dell'AI

La libreria standard di Go non dispone di una funzione async.Map, ma ci sono approcci simili per l'elaborazione parallela usando goroutine e canali. Di solito, per applicare una funzione in modo asincrono a una slice, si usano goroutine e sync.WaitGroup per avviare operazioni in parallelo e attendere che siano completate.

Esempio di implementazione di una Map asincrona:

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
}

// Uso
inputs := []int{1, 2, 3, 4}
outputs := asyncMap(inputs, func(x int) int { return x * 2 })
fmt.Println(outputs) // [2 4 6 8]

Questo approccio permette di parallelizzare le operazioni in modo efficiente, ma richiede una gestione attenta della sincronizzazione e della gestione degli errori.