Pular para conteúdo

Aula 06 - Tratamento de Erros ⚠️

Lidando com Falhas de Forma Idiomática


Agenda de Hoje 📅

  1. Filosofia: Erros como Valores
  2. O Padrão if err != nil
  3. Erros Customizados
  4. O Poder do defer
  5. Panic e Recover
  6. 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).
mu.Lock()
defer mu.Unlock() // Destrava no final, aconteça o que acontecer

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 panic para 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."