🧩 Exercícios: Tratamento de Erros Idiomático, defer, panic e recover
Spec Sistemas Com Go • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 13.1 — Criação de Erros com errors.New() e fmt.Errorf()
Contexto: Criação de Erros com errors.New() e fmt.Errorf() no contexto de Tratamento de Erros Idiomático, defer, panic e recover.
Requisitos de Execução:
- Criar e retornar erro com contexto formatado
fmt.Errorf('falha ao abrir %s: %w', arq, err).
Resultado Esperado
Erro empacotado com contexto semântico.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_1_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tratamento de Erros Idiomático, defer, panic e recover
🔑 Gabarito de Código & Solução Comentada
package main
import (
"errors"
"fmt"
)
func processarArquivo(nome string) error {
if nome == "" {
return errors.New("nome do arquivo nao pode ser vazio")
}
return nil
}
func main() {
if err := processarArquivo(""); err != nil {
fmt.Printf("Erro capturado: %v\n", err)
}
}
🔍 Nível 2: Prática
Problema 13.2 — Execução Adiada com defer (Pilha LIFO)
Contexto: Execução Adiada com defer (Pilha LIFO) no contexto de Tratamento de Erros Idiomático, defer, panic e recover.
Requisitos de Execução:
- Demonstrar que instruções
deferexecutam no retorno da função em ordem reversa LIFO.
Resultado Esperado
Instruções defer executadas ordenadamente na finalização da função.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_2_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tratamento de Erros Idiomático, defer, panic e recover
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func main() {
defer fmt.Println("3. Ultimo defer executado")
defer fmt.Println("2. Segundo defer executado")
fmt.Println("1. Execucao principal")
}
⚡ Nível 3: Integração
Problema 13.3 — Inspeção de Erros Encadeados com errors.Is() e errors.As()
Contexto: Inspeção de Erros Encadeados com errors.Is() e errors.As() no contexto de Tratamento de Erros Idiomático, defer, panic e recover.
Requisitos de Execução:
- Verificar erro sentinela na cadeia com
errors.Is(err, ErrNaoEncontrado).
Resultado Esperado
Erro sentinela inspecionado em árvore de erros empacotados.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_3_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tratamento de Erros Idiomático, defer, panic e recover
🔑 Gabarito de Código & Solução Comentada
package main
import (
"errors"
"fmt"
)
var ErrNotFound = errors.New("nao encontrado")
func buscar() error {
return fmt.Errorf("banco falhou: %w", ErrNotFound)
}
func main() {
err := buscar()
if errors.Is(err, ErrNotFound) {
fmt.Println("Erro de recurso nao encontrado identificado com sucesso.")
}
}
🏆 Nível 4: Desafio Corporativo
Problema 13.4 — Recuperação de Panics Críticos com recover() no defer
Contexto: Recuperação de Panics Críticos com recover() no defer no contexto de Tratamento de Erros Idiomático, defer, panic e recover.
Requisitos de Execução:
- Interceptar
panicem middleware HTTP garantindo que o servidor web continue atendendo requisições.
Resultado Esperado
Panic interceptado pelo recover sem derrubar o processo principal.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_13_4_SeuNome - Envie na tarefa:
Atividade Cap 13 - Tratamento de Erros Idiomático, defer, panic e recover
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func executarSeguro() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("PANIC INTERCEPTADO: %v\n", r)
}
}()
panic("Falha catastrofica de memoria simulada")
}
func main() {
executarSeguro()
fmt.Println("Sistema continuou sua execucao apos recuperacao.")
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |