Sobes.tech
Senior

Como poderíamos tratar externamente os erros que ocorrem nas tarefas, se quiséssemos fazê-lo?

sobes.tech IA

Resposta da IA

Em Go, se executarmos tarefas (jobs) em goroutines, os erros internos não são retornados diretamente, pois as goroutines funcionam de forma assíncrona. Para tratar erros de fora, podem-se usar várias abordagens:

  1. Canais para transmissão de erros: criar um canal de erros, no qual a goroutine envia o erro, e a parte que chama lê do canal.
errCh := make(chan error)
go func() {
    err := doTask()
    errCh <- err
}()

err := <-errCh
if err != nil {
    // tratamento do erro
}
  1. Uso de sync.WaitGroup e estruturas para resultados: se várias goroutines forem lançadas, podem-se coletar erros em um slice ou mapa.

  2. Contexto com cancelamento: pode-se passar um contexto e cancelar a execução em caso de erros.

  3. Wrappers com retorno de erros: se a tarefa retorna um erro, pode-se executá-la em uma função que retorne um erro e tratá-lo após a conclusão.

Dessa forma, para o tratamento externo de erros das tarefas, é necessário passar explicitamente os erros por canais ou outras estruturas, pois o Go não suporta retorno automático de erros de goroutines.