Mejores Prácticas para Características Avanzadas del Lenguaje
Utilice las características de potencia solo con una necesidad operativa clara.
Busca en todas las páginas de la documentación
Utilice las características de potencia solo con una necesidad operativa clara.
Estas reglas destilan la sección de características avanzadas del lenguaje: por defecto, usar Go portable, documentar comandos de lanzamiento y tratar los plugins, el ensamblaje y linkname como excepciones.
go:embed, etiquetas de compilación o -buildmode.c-shared o ensamblaje a producción.embed y modos de compilación solo cuando las operaciones o la portabilidad lo exijan.noinline. Demuestre el costo de CPU con pprof o benchmarks, no con intuición.runtime.GOOS con importaciones externas. Un archivo por plataforma escala más limpiamente en la revisión.embed.FS con fs.Sub para rutas estáticas HTTP. Elimine prefijos para que las rutas de URL sigan siendo intuitivas.embed crezcan. Falla la revisión cuando los artefactos excedan los umbrales presupuestarios.//go:build en archivos nuevos; migre el // +build heredado al tocarlo. Mantenga las restricciones legibles con paréntesis.GOOS no linux cuando envía multiplataforma. Windows o darwin detectan fallos de respaldo faltantes temprano.-ldflags, -tags y -buildmode en el Makefile o en los registros de CI. Los artefactos reproducibles requieren comandos exactos de copiar y pegar.-X main.version=... usando la ruta de importación correcta. Verifique con go list -f '{{.ImportPath}}' ./cmd/....-s -w) y de depuración separados. Los operadores necesitan símbolos durante los incidentes.go.mod/go.sum entre los módulos del host y del plugin. La discrepancia de dependencias causa fallos sutiles en Lookup.plugin para catálogos controlados en las instalaciones..s. Los archivos //go:build !amd64 (o arquitectura relevante) son obligatorios.//go:linkname en paquetes de aplicaciones. Restrinja a bifurcaciones de patrones de runtime/stdlib con propietarios de actualización.//go:noinline a pruebas y benchmarks a menos que un contrato de tiempo de ejecución lo requiera. No pessimice rutas de producción importantes..s. Las pruebas solo para amd64 se pierden la sintaxis rota de arm64.go fix después de las actualizaciones de la toolchain y revise las diferencias. Los modernizadores detectan migraciones de inline y API temprano.Demuestre que las rutas de archivo en tiempo de ejecución o los volúmenes externos son inaceptables para el despliegue o el cumplimiento, y que el impacto en el tamaño del binario es aceptable.
Cuando el código no debe compilarse en otras plataformas en absoluto (diferentes syscalls, disponibilidad de cgo), no cuando los usuarios simplemente activan funciones.
Raramente.
Prefiera binarios estáticos y límites de servicio hasta que un cliente de pago exija extensión en proceso con control de operaciones compartido.
Exija pruebas de mejora de benchmarks, alternativas de arquitectura y un propietario con nombre que solucionará las roturas en las actualizaciones de Go.
No para las páginas de documentación publicadas.
Los lectores necesitan saber qué suposiciones de la versión de Go se aplican.
Utilice Características Avanzadas para embed, etiquetas, buildmode, plugins, ensamblaje y directivas.
Utilice CGO cuando el problema principal sea la interoperabilidad de encabezados C y las reglas de memoria C.
Versiones de la Pila: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, modernizadores de go fix - verifique el parche en la compilación), chi (última - verifique en la compilación), gin (última - verifique en la compilación), echo (última - verifique en la compilación), google.golang.org/grpc (última - verifique en la compilación), sigs.k8s.io/controller-runtime (última - verifique en la compilación), kubebuilder (última - verifique en la compilación), tinygo (última - verifique las placas de destino en la compilación), wazero (última - verifique en la compilación) y golangci-lint (última - verifique el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026