Sobes.tech
Junior — Middle

Podes partilhar um exemplo de como implementaste o tratamento de erros usando error.Group nos teus projetos?

sobes.tech IA

Resposta da IA

No pacote errors do Go com o tipo Group (por exemplo, de golang.org/x/sync/errgroup) permite coletar e tratar facilmente múltiplos erros que ocorrem em goroutines paralelas.

Exemplo de uso de errgroup.Group para executar tarefas em paralelo com tratamento de erros:

import (
    "fmt"
    "golang.org/x/sync/errgroup"
)

func processTasks() error {
    var g errgroup.Group

    tarefas := []func() error{
        func() error { /* tarefa 1 */ return nil },
        func() error { /* tarefa 2 */ return fmt.Errorf("erro na tarefa 2") },
        func() error { /* tarefa 3 */ return nil },
    }

    for _, tarefa := range tarefas {
        t := tarefa
        g.Go(func() error {
            return t()
        })
    }

    if err := g.Wait(); err != nil {
        // Tratamento do primeiro erro encontrado
        return err
    }
    return nil
}

Nos meus projetos, usei errgroup para iniciar várias operações independentes em paralelo e coletar erros de forma organizada, o que simplifica o código e melhora a legibilidade.