Padrões de Desenvolvimento Go
Fluxo de Trabalho Obrigatório
Para revisões, invoque skills relacionados: security-audit (OWASP), enterprise-readiness (OpenSSF/SLSA), github-project (proteção de branch). Todos são obrigatórios.
Princípios Fundamentais
Segurança de Tipos
- Evite:
interface{}(useany),sync.Map, type assertions espalhadas, reflexão - Prefira: Genéricos
[T any],errors.AsType[T](Go 1.26), tipos concretos - Execute
go fix ./...após atualizações
Consistência
- Um padrão por domínio de problema
- Corresponda aos padrões existentes do código
- Refatore holisticamente ou não refatore
- Precedência de configuração: padrões < arquivo de configuração < variáveis de ambiente < flags
Testes
- Tags de build isolam camadas de teste: unitário (padrão),
integration,e2e - Sempre use
t.Parallel(),t.Helper(), subtestes orientados por tabela - Use
log/slogdiretamente – nunca o envolva em interfaces de Logger personalizadas
Convenções
- Erros: minúsculas, sem pontuação (
errors.New("entrada inválida")) - Nomenclatura: ID, URL, HTTP (não Id, Url, Http)
- Encadeamento de erros:
fmt.Errorf("falha ao processar: %w", err)
Referências
Git hooks: ls lefthook.yml 2>/dev/null && lefthook install || echo "Adicione lefthook — veja references/lefthook-template.md"
Carregue conforme necessário:
| Referência | Finalidade |
|---|---|
references/architecture.md | Estrutura de pacotes, gerenciamento de configuração, cadeias de middleware |
references/logging.md | Logging estruturado com log/slog, migração do logrus |
references/cron-scheduling.md | Padrões go-cron: jobs nomeados, atualizações em tempo de execução, contexto, resiliência |
references/resilience.md | Lógica de retry, encerramento gracioso, propagação de contexto |
references/docker.md | Padrões de cliente Docker, pooling de buffers |
references/ldap.md | Integração LDAP/Active Directory |
references/testing.md | Estratégias de teste, tags de build, testes orientados por tabela |
references/linting.md | golangci-lint v2, staticcheck, qualidade de código |
references/api-design.md | Opções de bitmask, opções funcionais, builders |
references/fuzz-testing.md | Padrões de fuzzing em Go, sementes de segurança |
references/contracts-and-invariants.md | Contratos, invariantes, testes de propriedade |
references/mutation-testing.md | Configuração do Gremlins, medição de qualidade de teste |
references/makefile.md | Interface Makefile padrão para CI/CD |
references/modernization.md | Modernizadores Go 1.26, go fix, errors.AsType[T], wg.Go() |
references/lefthook-template.md | lefthook.yml pronto para uso para git hooks de projetos Go |
references/reusable-workflows.md | Chamadores de workflow de Actions reutilizáveis, propagação de permissão, saídas de portão de liberação |
references/single-build-release.md | Release de build único: cross-compile uma vez, reutilize para release+container |
references/awesome-go-submission.md | Submissão awesome-go: corpo de PR analisado por CI, formato de entrada, colisões de nome |
Portões de Qualidade
Execute antes de completar qualquer revisão:
golangci-lint run --timeout 5m # Linting
go vet ./... # Análise estática
staticcheck ./... # Verificações adicionais
govulncheck ./... # Varredura de vulnerabilidades
go test -race ./... # Detecção de corrida
Correções de Vulnerabilidades da Stdlib
Quando govulncheck relatar vulnerabilidades da stdlib: verifique a versão de correção via vuln.go.dev, atualize go X.Y.Z no go.mod, execute go mod tidy. Use branches de PR para repositórios com proteção de branch.
Contribuindo: Envie melhorias para https://github.com/netresearch/go-development-skill