Spec Sistemas Com Go • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 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:

  1. 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)

  1. Salve o arquivo como: Atividade_13_1_SeuNome
  2. 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:

  1. Demonstrar que instruções defer executam 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)

  1. Salve o arquivo como: Atividade_13_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_13_3_SeuNome
  2. 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:

  1. Interceptar panic em 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)

  1. Salve o arquivo como: Atividade_13_4_SeuNome
  2. 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