Boas Práticas da Biblioteca Padrão
Prefira a biblioteca padrão até que haja uma lacuna clara; conheça os caminhos de depreciação.
Busque em todas as páginas da documentação
Prefira a biblioteca padrão até que haja uma lacuna clara; conheça os caminhos de depreciação.
Aplique estas regras em revisões de código, modelos de módulos e ADRs de dependência para que todo serviço Go obtenha atualizações previsíveis e superfícies de ataque menores.
go vet, staticcheck, guardas de importação) sempre que possível.go mod tidy mais rápido e SBOMs menores.crypto/tls e crypto/rand acompanham os lançamentos de segurança do Go.govulncheck em módulos que duplicam funções da biblioteca padrão. Detecta problemas conhecidos em bibliotecas HTTP ou JSON sobrepostas.io.Copy e limite a entrada não confiável com io.LimitReader. Evita OOM em uploads e corpos maliciosos.filepath para caminhos do SO e path apenas para barras semelhantes a URL. Implantações do Windows falham com / codificado.bufio.Scanner para entrada de linha; defina limites de buffer para tokens longos. Evita Err silencioso em linhas de log largas.filepath.WalkDir em vez do legado Walk. Reduz chamadas Stat extras em árvores grandes.time.Location na exibição. Instantes seguros contra horário de verão em todas as regiões.context.Context como o primeiro parâmetro em APIs de bloqueio. Permite cancelamento uniforme de HTTP e RPC.cancel() de WithTimeout e WithCancel via defer. Libera recursos de temporizador prontamente.time.Sleep nu em servidores por select em ctx.Done(). Ganchos de desligamento terminam dentro dos períodos de graça.log/slog para novos serviços com manipuladores JSON em produção. Operadores analisam níveis e atributos de forma confiável.MustCompile por solicitação desperdiça CPU sob carga.html/template, não text/template. Escapamento contextual bloqueia XSS de campos de usuário.log para limites legados até a migração. Estilos mistos são aceitáveis a curto prazo; planeje slog em main.crypto/rand, nunca math/rand/v2. IDs previsíveis se tornam vetores de tomada de conta.math/rand/v2 com fontes Rand explícitas em bibliotecas. Remove estado global oculto e testes paralelos instáveis.gzip.Writer para descarregar rodapés antes de enviar arquivos compactados. Gzip truncado quebra consumidores downstream.MinVersion do TLS para 1.2 ou superior em listeners. Documenta a postura de cifra para revisão de segurança.PingContext bancos de dados durante a inicialização antes de aceitar tráfego. Revela DSNs ruins no momento da implantação, não no primeiro usuário.SetMaxOpenConns e SetConnMaxLifetime a partir de cálculos de capacidade do DB. Protege instâncias de banco de dados compartilhadas de um único serviço.QueryContext e ExecContext em manipuladores HTTP. Honra os prazos de r.Context() automaticamente.http.Client dedicadas com tempos limite por upstream. Nunca confie em http.DefaultClient em servidores.ReadHeaderTimeout em cada http.Server de produção. Bloqueia travamentos slowloris antes que os manipuladores executem.pprof.Do para gráficos de chama atribuíveis. Caso contrário, os perfis mostram quadros de tempo de execução anônimos.debug.SetMemoryLimit com os limites de memória do Kubernetes. Deixe margem para pilhas e alocações fora da pilha.Quando a biblioteca padrão não tem a capacidade (grafos de relação ORM, DSLs de validação avançadas, SDKs de fornecedor) ou quando os padrões organizacionais exigem um wrapper compartilhado.
Registre a lacuna no README ou no texto do ADR.
Migre nas fronteiras do serviço, começando por main.
Bibliotecas devem aceitar parâmetros *slog.Logger em vez de forçar padrões globais.
Use linters de importação (depguard, analisadores go vet personalizados) para bloquear frameworks HTTP duplicados no mesmo módulo sem um arquivo de isenção.
Novo código usa math/rand/v2 com fontes explícitas.
Funções globais legadas math/rand permanecem para compatibilidade, mas evite-as em bibliotecas.
Roteadores são aceitáveis quando exportam http.Handler e justificam a ergonomia.
Ainda aplique as regras de tempo limite, cliente e contexto da biblioteca padrão por baixo.
Frequentemente sim para gravadores sqlite embarcados.
Bancos de dados de servidor como PostgreSQL precisam de pools maiores ajustados aos limites da instância.
Após cada lançamento menor do Go e durante auditorias anuais de dependência.
Novos pacotes da biblioteca padrão podem preencher lacunas que anteriormente exigiam módulos.
Sim.
embed substitui etapas de compilação de cópia de ativos; slog substitui formatadores de log JSON ad-hoc para muitos serviços.
testing e httptest cobrem a maioria das necessidades.
Adicione testify ou similar apenas quando as asserções de tabela melhorarem materialmente a legibilidade e houver consenso da equipe.
Mantenha um EXCEPTIONS.md ou links inline de ADR em comentários go.mod listando pacotes aprovados não pertencentes à biblioteca padrão e a lacuna de capacidade preenchida.
Não.
google.golang.org/grpc preenche um protocolo que a biblioteca padrão não envia; ainda use padrões context, tls e logging da biblioteca padrão junto com ele.
Importar um framework web completo antes de esgotar os padrões net/http, slog e database/sql.
Comece com o mínimo; adicione camadas quando a dor for medida, não antecipada.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizers - verifique o patch na compilação), chi (mais recente - verifique na compilação), gin (mais recente - verifique na compilação), echo (mais recente - verifique na compilação), google.golang.org/grpc (mais recente - verifique na compilação), sigs.k8s.io/controller-runtime (mais recente - verifique na compilação), kubebuilder (mais recente - verifique na compilação), tinygo (mais recente - verifique os alvos de placa na compilação), wazero (mais recente - verifique na compilação) e golangci-lint (mais recente - verifique o conjunto de linters na compilação).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026