🚀 Oferta especial: 60% OFF no CrazyStack - Últimas vagas!Garantir vaga →
Go

Tratamento de Erros em Go

Aprenda como identificar e tratar erros de maneira eficaz em aplicações escritas com a linguagem Go.

CrazyStack
15 min de leitura
GoError HandlingBackend

Por que isso é importante

No mundo real, aplicações estão sujeitas a falhas externas e internas. Saber lidar com esses erros é essencial para garantir a resiliência, segurança e estabilidade da aplicação. Golang adota uma abordagem explícita ao tratamento de erros que exige atenção redobrada do desenvolvedor.

O que é um erro em programação

Em programação, um erro representa um comportamento inesperado no fluxo da aplicação. Esse erro pode resultar de dados inválidos, falhas externas ou problemas lógicos internos. Em Go, esses erros são tratados de forma explícita, sem uso de exceptions como em outras linguagens.

Exemplo de erro prático

Imagine um sistema de e-commerce com integração aos Correios para cálculo de frete. Quando essa API está indisponível, o sistema não pode recuperar o valor do envio, provocando uma falha inesperada. Para evitar que a aplicação quebre, é necessário realizar o tratamento correto desse erro.

Comparando com outras linguagens

Go

Utiliza múltiplos valores de retorno para propagar erros

Prós
  • Erros explícitos
  • Sem exceções inesperadas
Contras
  • Mais verbosidade no código

Python / Java

Utilizam try/catch para capturar exceções

Prós
  • Código mais limpo em alguns casos
  • Stack trace útil
Contras
  • Fácil de ignorar erros
  • Custo de exceções mais alto

Tratando erro com retorno múltiplo

1
Passo 1: Crie uma função que retorne dois valores: um resultado válido e um erro.
2
Passo 2: Use o comando errors.New para gerar um erro quando necessário.
3
Passo 3: No código cliente, verifique se o erro é diferente de nil antes de acessar o resultado.

Entendendo o nil em Go

O valor nil em Go representa um valor nulo para ponteiros, interfaces, maps, slices e outros tipos. Verificar se um erro é diferente de nil permite identificar se ocorreu alguma falha no processamento.

Simulando division por zero

Ao construir uma função que divide dois números, o código deve validar se o divisor é igual a zero. Caso seja, um erro explicativo deve ser retornado, evitando uma falha de execução mais grave.

⚠️Atenção

Em Go, nenhuma divisão por zero deve ocorrer sem validação. Isso pode gerar um panic e interromper a execução do programa.

Cenário com panic

Quando erros não são tratados corretamente, o Go pode lançar um panic. Isso interrompe totalmente a execução do programa, afetando a experiência do usuário e a integridade da aplicação.

Importante

Panics devem ser evitados ao máximo. Só utilize quando realmente for uma falha crítica irrecuperável.

Tratando erros com recover

A função recover() pode ser usada para capturar panics e continuar com a execução. No entanto, isso deve ser feito com cautela e somente quando necessário.

ℹ️Aviso

Usar recover() de forma indiscriminada pode mascarar bugs e comprometer a segurança da aplicação.

Erros personalizados com structs

Em Go, é possível criar erros customizados implementando a interface error. Assim, você pode carregar mensagens mais informativas e até mesmo códigos de status para categorizar os erros.

Implementando a interface error

Basta criar um struct com os campos desejados e implementar o método Error() com retorno de string formatada. Assim, o tipo passa a ser reconhecido como um erro válido em Go.

Vantagens de erros customizados

Com erros personalizados, é possível identificar de forma clara o tipo e a origem da falha, facilitando o tratamento específico em diferentes partes do código.

Usando type assertion com erros

Go permite verificar o tipo de erro em tempo de execução usando type assertions. Isso possibilita tratar especificamente cada tipo de erro customizado.

ErrorIs e ErrorAs

Através das funções errors.Is e errors.As, podemos comparar erros por tipo ou valor, o que amplia ainda mais a forma como os erros são manipulados e interpretados.

Melhores práticas no error handling

Sempre trate erros imediatamente após sua ocorrência, evite ignorar retornos. Nunca use panic como controle de fluxo e prefira erros bem definidos e documentados.

Resumo da abordagem Go

O Go incentiva o tratamento explícito e controlado dos erros. Isso resulta em sistemas mais previsíveis, seguros e fáceis de manter, mesmo que exijam mais código na prática.

Checklist de Implementação

Criou funções com múltiplos retornos (valor, erro)
Tratou erros sempre que diferentes de nil
Evitou o uso indevido de panic
Implementou erros personalizados com structs
Utilizou type assertion para identificar tipos de erro

Domine React e Node com o CrazyStack

Aprenda técnicas avançadas de React com nosso curso completo