Boas Práticas da Filosofia Go
Dez princípios que mantêm as bases de código Go alinhadas com o ethos da linguagem: legível, explícito e operável em escala.
Busque em todas as páginas da documentação
Dez princípios que mantêm as bases de código Go alinhadas com o ethos da linguagem: legível, explícito e operável em escala.
go fix modernizadores em 1.26 são um bom gatilho).golangci-lint, go vet) para que a filosofia se torne um sinal de CI, não de memória.gofmt cuidar da formatação. Sem debates de alinhamento personalizados em revisões; use gofmt/goimports em CI.checkout em vez de util.UserStore é melhor que UserDAO; Go não é cosplay corporativo Java.context.Context como o primeiro parâmetro em limites de I/O. Nunca armazene contexto em structs.(T, error) e envolva com %w. Documente erros sentinela com var ErrFoo = errors.New("...") para errors.Is estável.New em main. Evite var db *sql.DB global em bibliotecas; conecte explicitamente em cmd/.ctx.Done(), e evite fan-out ilimitado.go test -race em CI em pacotes que usam goroutines. Filosofia sem detecção é pensamento positivo.net/http, encoding/json e log/slog cobrem muitos serviços.pprof, tracer de execução). Medir se alinha com a cultura Go; adivinhar não.SIGTERM, descarregue manipuladores e alinhe com as semânticas de probe do Kubernetes.go fix durante as atualizações. Deixe as ferramentas migrarem idiomas em vez de alterações manuais em monorepos.govulncheck. Filosofia inclui higiene da cadeia de suprimentos, não apenas sintaxe./v2.O título reflete o decálogo cultural principal; as seções agrupam regras aplicáveis relacionadas.
Adote a lista inteira, mesmo que o marketing arredonde para dez temas.
Imponha gofmt, go vet, golangci-lint, -race e govulncheck em CI.
Limites de pacotes e formato de API permanecem em revisão humana com backup de ADR.
Frameworks são aceitáveis quando removem boilerplate sem ocultar o ciclo de vida.
A filosofia ainda exige conexão explícita, contexto e desligamento em main.
Sim para concorrência, contexto e erros.
O código interno pode avançar mais rapidamente em alterações disruptivas - mas prefira limites claros de módulos de qualquer maneira.
Importar padrões corporativos Java/C# - gráficos DI gigantes, interfaces amplas e erros baseados em strings - que a ferramenta do Go não recompensa.
Use genéricos para remover duplicação, não para construir frameworks genéricos.
Se func Map for mais claro sem parâmetros de tipo, pule-os.
Quando frameworks fornecem ecossistemas de middleware testados (autenticação, vinculação, hooks OpenTelemetry) que levariam trimestres para replicar.
Documente a dependência em um ADR.
Integre todos os engenheiros, revise durante grandes atualizações do Go e após incidentes causados por concorrência ou deriva de API.
Regras de concorrência e contexto ainda se aplicam onde o tempo de execução as suporta.
Restrições de memória e chamadas de sistema podem exigir dependências mais enxutas - verifique os alvos da placa na compilação.
Loops de reconciliação explícitos, chamadas de cliente cientes de contexto, logging estruturado e desligamento de eleição de líder espelham as regras de serviço.
Use padrões de controller-runtime em vez de inventar cola de observação.
Menores taxas de incidentes por pânicos/races, pesquisas de integração mais rápidas, menos alterações de API disruptivas e PRs de atualização dominados por ferramentas (go fix) em vez de edições manuais.
Mova-se para as seções de fundamentos, concorrência e arquitetura assim que as normas da equipe estiverem alinhadas.
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 da 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