Go errors v2: do 'if err != nil' ao que muda em 1.26

errors.Join, %w, wrapping em cadeia: o que evoluiu nos últimos cinco anos e por que importa.

Quem programa Go faz piada do 'if err != nil' como ritual, mas a verdade é que tratamento de erro em Go melhorou silenciosamente nos últimos cinco anos. Quem está em 1.20+ tem ferramentas que em 1.15 só existiam em bibliotecas externas. Vou listar o que mudou e por que continuei escrevendo if err != nil mas com muito menos ansiedade.

Primeiro: %w em fmt.Errorf existe desde 1.13 e ainda assim metade da base de código que vi não usa. fmt.Errorf("parse config: %w", err) embute o err original na string, e errors.Unwrap recupera ele depois. Isso te permite usar errors.Is e errors.As pra checar tipos específicos no meio da cadeia sem perder contexto. O ganho é grande: você descobre que um erro de network em camada baixa é o mesmo erro que apareceu como 'parse config falhou' em alta.

Segundo: errors.Join (Go 1.20) resolve o problema de validação em batch. Antes, você validava cinco campos de um formulário e retornava 'multiple errors: campo1, campo2, campo3' como string concatenada — uma vez retornado, era texto e nada mais. Com errors.Join, você acumula erros tipados num único erro, e quem recebe pode iterar via Unwrap() []error e descobrir cada um. Pra APIs com validação rica, isso muda jogo.

Terceiro: wrapping em cadeia profunda agora performa bem. errors.Is faz comparação ascendente pela cadeia toda, mas em Go 1.21 a verificação foi otimizada pra pular cadeias longas sem alocar. Antes o conselho era 'não wrappear mais que 3-4 níveis'; hoje não tem ressalva. Eu wrappo em cada camada da hexagonal — repository, use case, handler — e cada wrap adiciona contexto. O erro final tem 4 frames de contexto e isso aparece bonito no log estruturado.

Quarto: o que ainda dói em Go 1.26. Stacktrace em erro continua sendo decisão da aplicação — a biblioteca padrão não traz. Você precisa do cockroachdb/errors ou similar pra ter trace automático, e isso é cerimônia. Em código novo eu uso pkg/errors versão original do Dave Cheney por hábito, mesmo sabendo que ele desaconselhou. Mas a tendência é clara: a equipe de Go está fazendo o caminho certo, devagar, e quem investiu em entender %w hoje tem um sistema de erros que envelhece bem.

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly