Melhores Práticas para Recursos Avançados de Linguagem
Alcance recursos poderosos apenas com necessidade operacional clara.
Busque em todas as páginas da documentação
Alcance recursos poderosos apenas com necessidade operacional clara.
Estas regras destilam a seção de recursos avançados da linguagem: use Go portátil por padrão, documente comandos de release e trate plugins, assembly e linkname como exceções.
go:embed, tags de compilação ou -buildmode.c-shared ou assembly para produção.embed e modos de compilação apenas quando a operação ou portabilidade exigir.noinline. Prove o custo de CPU com pprof ou benchmarks, não com intuição.runtime.GOOS espalhadas com imports estrangeiros. Um arquivo por plataforma escala de forma mais limpa na revisão.embed.FS com fs.Sub para rotas estáticas HTTP. Remova prefixos para que os caminhos de URL permaneçam intuitivos.//go:build em novos arquivos; migre // +build legado ao tocar. Mantenha as restrições legíveis com parênteses.GOOS não-linux quando você envia multiplataforma. Windows ou darwin capturam fallbacks ausentes precocemente.-ldflags, -tags e -buildmode no Makefile ou nos logs de CI. Artefatos reproduzíveis exigem comandos exatos para copiar e colar.-X main.version=... usando o caminho de importação correto. Verifique com go list -f '{{.ImportPath}}' ./cmd/....-s -w) e de depuração separados. Operadores precisam de símbolos durante incidentes.go.mod/go.sum entre os módulos do host e do plugin. Desvios de dependência causam crashes sutis em Lookup.plugin para catálogos controlados on-premise..s. Arquivos //go:build !amd64 (ou arquitetura relevante) são obrigatórios.//go:linkname em pacotes de aplicação. Restrinja a forks de padrões de runtime/stdlib com proprietários de upgrade.//go:noinline a testes e benchmarks, a menos que um contrato de runtime exija. Não pessimise caminhos de produção quentes..s. Testes apenas amd64 perdem sintaxe arm64 quebrada.go fix após upgrades de toolchain e revise os diffs. Modernizadores capturam migrações inline e de API precocemente.Demonstre que caminhos de arquivo de runtime ou volumes externos são inaceitáveis para implantação ou conformidade, e que o impacto no tamanho do binário é aceitável.
Quando o código não deve compilar em outras plataformas de forma alguma (diferentes chamadas de sistema, disponibilidade de cgo), não quando os usuários simplesmente alternam recursos.
Raramente.
Prefira binários estáticos e limites de serviço até que um cliente pagante exija extensão in-process com controle operacional compartilhado.
Exija prova de melhoria de benchmark, fallbacks de arquitetura e um proprietário nomeado que corrigirá quebras em upgrades do Go.
Não para páginas de documentação publicadas.
Os leitores precisam saber quais suposições de release do Go se aplicam.
Use Recursos Avançados para embed, tags, buildmode, plugins, assembly e diretivas.
Use CGO quando o problema principal for interoperação de cabeçalho C e regras de memória C.
Versões da 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 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 de 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