Pacotes, Módulos e Boas Práticas de Layout de Projeto
Convenções de higiene de módulos, marcação e publicação.
Busque em todas as páginas da documentação
Convenções de higiene de módulos, marcação e publicação.
Esses hábitos mantêm os grafos de importação pequenos, as releases previsíveis e os monorepos manteníveis à medida que as equipes crescem.
go mod tidy, go test ./..., go vet ./... e golangci-lint no CI./v2 para bibliotecas).github.com/org/repo ou seu domínio real para que go get resolva para sempre.go.mod e go.sum juntos. Builds reproduzíveis e verificação de checksum dependem de ambos os arquivos.go mod tidy antes de cada merge e tag de release. Órfãos e indiretos ausentes nunca devem surpreender o CI./v2 no caminho do módulo e nos caminhos de importação.go get module@version intencional. Evite @latest cegamente em produção principal sem revisão do changelog.go mod why -m para justificar novos módulos transitivos. Remova peso não utilizado antes que ele se torne enraizado.GOPRIVATE para módulos privados e desabilite sumdb onde apropriado. Documente a autenticação VCS para CI e laptops.go.work em vez de caminhos replace específicos da máquina em branches compartilhados. Overrides locais pertencem a arquivos de workspace ou configuração de desenvolvimento documentada.cmd/ enxuto; injete a orquestração em main, a lógica em outro lugar. Um pacote main por binário sob cmd/<nome>/.internal/. Deixe o compilador impor limites em vez de apenas avisos no README.util ou common. Nomes curtos em minúsculas; evite repetição de importação nos locais de chamada.pkg/ ou de biblioteca de nível superior.go test ./... e go vet ./... em cada candidato a tag. Consumidores de módulos herdam sua barra de qualidade./v2.go mod vendor ajuda o CI em modo air-gapped; não deixe o vendor apodrecer silenciosamente.go.mod extras adicionam custo operacional.go.work raiz quando as equipes co-desenvolvem módulos diariamente. Documente verificações GOWORK=off para validação de publicação.internal/ entre módulos. internal não abrange limites de módulo, mesmo em um único repositório Git.Quando você remover ou alterar APIs exportadas de forma incompatível.
Envie example.com/lib/v2 e mantenha v1 no caminho antigo até que a depreciação seja concluída.
Apenas para forks permanentes com acordo da equipe.
Caminhos locais temporários pertencem a go.work ou documentação do desenvolvedor, não a branches principais compartilhadas.
Marque quando os consumidores precisarem de um ponto de upgrade reproduzível.
Tags de patch para correções, minor para recursos compatíveis com versões anteriores.
Não - a clareza é mais importante que o nome da pasta.
Documente os caminhos de importação suportados no README, independentemente do layout.
A toolchain Go mínima que seu módulo requer para recursos de linguagem.
Aumente-a deliberadamente ao adotar novas bibliotecas padrão ou sintaxe.
Aplicativos são módulos principais; mudanças quebradoras são internas.
Bibliotecas devem disciplina semver e /v2 para importadores downstream.
go list -m all, scanners de dependência e go mod tidy periódico após refatorações.
Remova primeiro os requires diretos não utilizados.
Builds air-gapped, recuperação de desastres ou trilhas de auditoria estritas de terceiros.
Combine com atualização automática de vendor no CI.
Trate como quebra: novo caminho, guia de migração e possivelmente aumento de versão principal.
O caminho antigo pode precisar de um módulo de compatibilidade ou redirecionamento no README.
Testes, vet, diff limpo do tidy, tag correta no commit e LICENSE presente.
A ingestão do proxy é eventual; verifique com go list -m -versions após o push da tag.
Versões da Stack: Esta página foi escrita para Go 1.26.x (GC padrão Green Tea, go fix modernizadores - verifique o patch na build), chi (latest - verifique na build), gin (latest - verifique na build), echo (latest - verifique na build), google.golang.org/grpc (latest - verifique na build), sigs.k8s.io/controller-runtime (latest - verifique na build), kubebuilder (latest - verifique na build), tinygo (latest - verifique os alvos de placa na build), wazero (latest - verifique na build) e golangci-lint (latest - verifique o conjunto de linters na build).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026