Melhores Práticas da Toolchain Go
Builds reproduzíveis, integração de CI e fixação da toolchain.
Busque em todas as páginas da documentação
Builds reproduzíveis, integração de CI e fixação da toolchain.
Estas regras mantêm os fluxos de trabalho do comando go consistentes, desde laptops até CI e artefatos de release.
GOPRIVATE, GOPROXY e GOTOOLCHAIN na CI e na documentação do desenvolvedor.go mod tidy, go test ./... e linters em cada aumento de dependência antes do merge.go.mod e documente a política de GOTOOLCHAIN. Colegas de equipe e CI devem resolver o mesmo compilador; use auto apenas quando aceitar downloads automáticos.go mod tidy após qualquer alteração de importação ou dependência. Mantém as linhas require mínimas e go.sum precisas.go.sum sempre que go.mod mudar. Checksums são parte do contrato de build reproduzível.GOPRIVATE para cada prefixo de módulo interno. Evita vazar caminhos privados para o proxy público e banco de dados de sum.proxy.golang.org. Acelera a CI e sobrevive a interrupções upstream.go build, não go run, em produção. run recompila a cada invocação e oculta o caminho do binário.-trimpath e -ldflags="-s -w" para binários de release. Reduz o tamanho e remove caminhos de host de stacks.-o bin/<nome>. Evita colisões ao construir múltiplos comandos em uma única etapa de pipeline.CGO_ENABLED=0 a menos que você realmente precise de cgo. Matrizes Go puras são mais simples em um único builder Linux.go version e go env nos logs de release. Acelera a depuração quando a CI e os builds do laptop divergem.go test ./... (ou ./... com -race na CI) em cada PR. O portão padrão antes do merge.go vet ./... antes de linters opcionais. Linha de base de configuração zero da stdlib.golangci-lint (ou staticcheck) com uma configuração commitada. Regras de toda a equipe além do vet.go test -count=1 enquanto depura flakes; corrija a causa raiz antes do merge. Não confie no cache de teste desabilitado na CI de produção para sempre.go fix -diff após atualizações do Go, então aplique com revisão. Modernizadores capturam idiomatismos que os dados de treinamento podem perder.GOMODCACHE e GOCACHE na CI. Etapas de aquecimento de go mod download compensam em cada job.-mod=readonly na CI quando não estiver usando vendor. Falha builds que modificam go.mod silenciosamente.vendor/. Desvios quebram pipelines -mod=vendor.go clean -modcache na CI rotineira. Limpe caches apenas quando a corrupção for comprovada.go mod download em modo seco. Capture a expiração do token antes das etapas de compilação.//go:generate. go run tool@version supera binários locais não documentados.go generate (git diff --exit-code). Saída gerada permanece sincronizada com as fontes.-tags necessários para builds de produção. O go test padrão pode pular arquivos com tags que a CI nunca exercita.go mod download, go test ./..., go vet ./... e, opcionalmente, golangci-lint run.
Adicione -race quando os runners tiverem CPU e RAM suficientes.
Use vendor quando a política exigir código-fonte de terceiros no repositório ou quando os builds não puderem alcançar proxies de módulos.
Caso contrário, prefira proxy mais GOMODCACHE em cache.
Defina go 1.26.x em go.mod e GOTOOLCHAIN=go1.26.x na CI.
Permita o download automático de patch apenas se a equipe concordar.
Durante branches de atualização, localmente com go fix -diff, então commite as alterações revisadas.
Não em cada PR não relacionado.
Athens armazena downloads em cache dentro da sua rede.
GOPRIVATE ainda marca quais caminhos nunca devem atingir o índice público.
Sim.
Mantenha suítes de integração lentas atrás de tags integration e execute-as noturnamente ou no branch principal.
GOPRIVATE, GOPROXY, GONOSUMDB, GOTOOLCHAIN e qualquer configuração de autenticação para hosts Git.
Não os segredos em si - referencie o armazenamento de segredos.
Cache GOCACHE, divida -race para um job dedicado e use -shuffle=on apenas ao procurar bugs de ordem.
Evite -a a menos que esteja depurando problemas de cache.
Sim.
Aplique com gofmt -l ou linters gofmt/goimports do golangci-lint na CI.
Binário por alvo, string go version incorporada via -ldflags, e entrada SBOM de go list -m -json all.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, modernizadores go fix - verifique o patch na compilação), chi (última - verifique na compilação), gin (última - verifique na compilação), echo (última - verifique na compilação), google.golang.org/grpc (última - verifique na compilação), sigs.k8s.io/controller-runtime (última - verifique na compilação), kubebuilder (última - verifique na compilação), tinygo (última - verifique os alvos de placa na compilação), wazero (última - verifique na compilação) e golangci-lint (última - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026