Trilha prática · Go
Regras de negócio que não dependem do banco, do framework ou do protocolo.
Aprenda Clean Architecture e Go ao mesmo tempo, evoluindo um único projeto real — aprovador-pedidos — camada por camada: domínio, casos de uso, interfaces e infraestrutura.
Comece aqui
Aulas
- Abrir aula
Aula 01 · 70–90 minutos
O que é Clean Architecture, e por quê
Aula 1 — Injeção de Dependência, o Dependency Inversion Principle, a Regra de Dependência, as quatro camadas, e a comparação com MVC/Active Record.
- Abrir aula
Aula 02 · 50–70 minutos
Interfaces em Go
Aula 2 — satisfação implícita, a convenção de onde declarar a interface, por que isso facilita testes, e a pegadinha do nil.
Como estudar esta trilha
31 aulas, um projeto só, evoluindo camada por camada
Cada aula parte de um problema concreto que já existe no projeto aprovador-pedidos — nunca de um exemplo abstrato solto. A ordem é deliberada: teoria (Regra de Dependência, DIP) antes da sintaxe de Go, sintaxe antes do primeiro projeto real, e cada camada nova (domínio, aplicação, infraestrutura, interface) só entra depois que a anterior está sólida. Aulas publicadas são clicáveis; as demais mostram a sequência planejada.
01 · Fundamentos
Entender por que a dependência aponta para dentro
Injeção de Dependência, Dependency Inversion Principle, a Regra de Dependência e as quatro camadas — antes de qualquer linha de Go.
- Módulos e pacotes em Go45–60 minutos · Aula 3 — go.mod, a relação entre diretório e pacote, caminhos de import, o diretório internal, e o que Go não dita sobre estrutura de pastas.
- Primeiro projeto Go real60–75 minutos · Aula 4 — construindo aprovador-pedidos do zero: domain puro, use case que declara a interface, fake para teste, implementação em memória e injeção manual em main.go.
- Screaming Architecture: o que a árvore de pastas deveria gritarEm breve
02 · Domínio
Dar estado e comportamento ao domínio
Um terceiro caso de uso revela que o domínio nunca teve estado explícito; Domain Events nomeia o que já acontecia escondido num adapter.
- Um terceiro use case: rejeitar, e o estado que faltavaEm breve
- Domain Events: nomeando o que pedido_eventos já fazia escondidoEm breve
03 · Aplicação
Modelar casos de uso e fronteiras
Um segundo caso de uso, DTOs nas fronteiras e a nomenclatura de Interactor/Input Boundary/Output Boundary de Uncle Bob comparada à do projeto.
- Um segundo use case: consultar pedidoEm breve
- DTOs: o que já existia desde a Lição 15, agora com nomeEm breve
- Input Ports: a nomenclatura de Uncle Bob vs. a do projetoEm breve
04 · Infraestrutura e persistência
Trocar detalhes sem tocar na regra
Banco de dados real, transações, configuração via variáveis de ambiente e um cliente de API externa — tudo isolado atrás de portas já definidas.
- Repositório real com banco de dadosEm breve
- Transações: duas escritas que precisam ser uma sóEm breve
- Configuração e variáveis de ambienteEm breve
- Integrando um cliente de API externa: score de crédito antes de aprovarEm breve
05 · Interface
Conectar o mundo externo ao caso de uso
Adapter HTTP, o roteador nativo do Go 1.22+, recuperação de panic e a diferença entre Presenter e DTO simples.
- Adapter HTTP para o caso de usoEm breve
- O roteador nativo do Go 1.22+Em breve
- panic e recover: o servidor não pode cair por um erro imprevistoEm breve
- Presenters e ViewModels: formatar não é decidirEm breve
06 · Testes e qualidade
Provar a regra, não só executá-la
Cross-cutting concerns via decorator, concorrência com goroutines e channels, testes tabulares e o ferramental que o time nunca discute.
- Cross-cutting concerns: logging sem sujar o use caseEm breve
- Goroutines e channels: consultando vários pedidos em paraleloEm breve
- Table-driven tests: um teste, muitos casosEm breve
- gofmt, go vet e linters: o time nunca discute chavesEm breve
- Conformidade arquitetural automatizadaEm breve
07 · Refatoração e evolução
Mudar um sistema vivo com risco controlado
SOLID e generics no projeto real, cancelamento com context, worker pools, coesão e acoplamento de componentes, evolução de contrato e CI/CD.
- SOLID no projeto real: S, O, L, IEm breve
- Generics: um decorator que serve para os três use casesEm breve
- context.Context: cancelamento atravessando as camadasEm breve
- Worker pool: limitando quantas goroutines rodam ao mesmo tempoEm breve
- Coesão e acoplamento de componentes: SOLID um nível acimaEm breve
- Evoluindo um use case sem quebrar contratoEm breve
- Extração de monolito modular: quando um pacote vira um móduloEm breve
- Consistência arquitetural em CI/CDEm breve
Para consultar