Sobes.tech
Junior — Middle

Quão confortável você se sente ao trabalhar com a função async.Map para operações assíncronas?

sobes.tech IA

Resposta da IA

A biblioteca padrão do Go não possui uma função async.Map, mas existem abordagens semelhantes para processamento paralelo usando goroutines e canais. Normalmente, para aplicar uma função de forma assíncrona a um slice, usa-se goroutines e sync.WaitGroup para lançar operações em paralelo e aguardar sua conclusão.

Exemplo de implementação de um Map assíncrono:

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]

Este método permite paralelizar operações de forma eficiente, mas requer gerenciamento cuidadoso de sincronização e tratamento de erros.