Boas Práticas de Arquitetura e Design
Evoluindo bases de código Go sem reescritas "big-bang".
Busque em todas as páginas da documentação
Evoluindo bases de código Go sem reescritas "big-bang".
Estes hábitos mantêm serviços testáveis, módulos publicáveis e refatorações incrementais conforme os requisitos mudam.
golangci-lint depguard e reuniões de arquitetura.cmd/. main constrói tipos concretos; bibliotecas expõem funções New.internal/ para implementação não pública. Deixe o compilador impor os limites do módulo.context.Context pelos caminhos de requisição. O cancelamento pertence aos métodos de serviço e repositório.internal/billing é melhor que pastas apenas de camada que se importam mutuamente.errgroup para concorrência limitada. Vincule o tempo de vida da goroutine ao context da requisição.go mod tidy antes do merge. Gráficos limpos reduzem surpresas em atualizações no CI./v2 e notas de migração.%w de forma consistente. Handlers mapeiam com errors.Is, não comparação de strings.go test ./... e go vet ./... no CI. Adicione golangci-lint com depguard para globais e ciclos.buf ou testes orientados pelo consumidor evitam desvios.slog ou padrão da equipe com IDs de trace/requisição nas bordas.go build no servidor.main. Drene requisições em andamento em SIGTERM antes de sair.Composição em cmd/, divisão handler-serviço, internal/ e contexto em I/O.
Adicione ADRs e OTel antes da escala multi-equipe.
Permita pacotes apenas de teste ou tags de compilação para helpers de integração.
Bloqueie var globalDB em caminhos não-cmd primeiro.
Quando espelha uma API externa estável que você não pode dividir (fachada de SDK de nuvem).
Envolva e estreite em seu limite.
Não.
Conexão manual até que a duplicação prejudique; use ADR para a mudança para geração de código.
Disciplina de API exportada mais rigorosa, tags semver e dependências mínimas.
Sem main - consumidores conectam seus construtores.
Mantenha o código gerado em pacotes api/ ou gen/.
Mapeie para tipos de domínio em adaptadores.
Trimestralmente ou após um Sev1 causado por acoplamento/globais.
Use a lista de verificação de refatoração para pontuação.
Sim - as práticas se importam com a direção da dependência, não com os nomes das pastas.
Use modernizadores go fix e a diretiva go atual em go.mod.
ADR para grandes atualizações de toolchain.
Novo estado mutável global para dependências com escopo de requisição.
Rejeite a menos que um ADR explique a necessidade herdada inevitável.
Versões de Stack: Esta página foi escrita para Go 1.26.x (GC padrão Green Tea, modernizadores go fix - verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os alvos de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026