Aula 06 - Tratamento de Erros ⚠️
Lidando com Falhas de Forma Idiomática
Agenda de Hoje 📅
- Filosofia: Erros como Valores
- O Padrão
if err != nil - Erros Customizados
- O Poder do
defer - Panic e Recover
- Mini-Projeto: Validador de Senha
1. Por que não Try/Catch? 🚫
- Exceções criam fluxos de controle ocultos ("saltos mágicos").
- Go prefere o tratamento explícito: "Lide com o erro onde ele ocorre".
- Erros são retornos, não interrupções catastróficas.
2. O Padrão Ouro do Go 🏆
f, err := os.Open("arquivo.txt")
if err != nil {
return fmt.Errorf("falha ao abrir: %w", err)
}
defer f.Close()
- Simples, legível e previsível.
3. Defer: Adiar para Garantir ⏱️
- Executa no final da função, não importa o que aconteça.
- Ideal para limpeza de recursos (Clean-up).
4. Diferença Crucial ⚖️
| Erro (Common) | Panic (Fatal) |
|---|---|
| Validação de dados | Falta de memória |
| Arquivo não encontrado | Erro lógico impossível |
| Timeout de rede | Corrupção de estado |
5. Fluxo de Tratamento 📊
graph TD
A[Inicia Operação] --> B{Erro?}
B -- Sim --> C[Log e Retorno]
B -- Não --> D[Continua Fluxo]
C --> E[Final da Função]
D --> E
6. Mini-Projeto: Validador de Senha 🚀
- Função
Validar(senha string) error. - Retorna erros específicos para:
- Senha curta.
- Sem números.
Resumo da Aula ✅
- Erros são valores e devem ser verificados.
- O
deferé seu melhor amigo para evitar vazamento de recursos. - Reserve o
panicpara o que é realmente fatal.
Próxima Aula: Arquivos e JSON 📁
- Lendo e escrevendo no disco.
- Serialização com Struct Tags.
Dúvidas? 🤔
"Não apenas trate o erro, dê contexto a ele."