Buenas prácticas de la biblioteca estándar
Prefiera la biblioteca estándar hasta que haya una brecha clara; conozca las rutas de desuso.
Busca en todas las páginas de la documentación
Prefiera la biblioteca estándar hasta que haya una brecha clara; conozca las rutas de desuso.
Aplique estas reglas en la revisión de código, plantillas de módulos y ADR de dependencias para que cada servicio de Go obtenga actualizaciones predecibles y superficies de ataque más pequeñas.
go vet, staticcheck, guardianes de importación) siempre que sea posible.go mod tidy más rápido y SBOMs más pequeños.crypto/tls y crypto/rand rastrean las versiones de seguridad de Go.govulncheck en módulos que duplican roles de la biblioteca estándar. Detecta problemas conocidos en bibliotecas HTTP o JSON superpuestas.io.Copy y limite la entrada no confiable con io.LimitReader. Evita OOM en cargas y cuerpos maliciosos.filepath para rutas de SO y path solo para barras similares a URL. Las implementaciones de Windows fallan con / codificado.bufio.Scanner para la entrada de líneas; establezca límites de búfer para tokens largos. Evita Err silenciosos en líneas de registro amplias.filepath.WalkDir en lugar del legado Walk. Reduce las llamadas Stat adicionales en árboles grandes.time.Location al mostrar. Instantes seguros para el horario de verano en todas las regiones.context.Context como el primer parámetro en las API de bloqueo. Permite la cancelación de HTTP y RPC de manera uniforme.cancel() desde WithTimeout y WithCancel a través de defer. Libera los recursos del temporizador rápidamente.time.Sleep desnudo en servidores con select en ctx.Done(). Los ganchos de apagado terminan dentro de los períodos de gracia.log/slog para nuevos servicios con manejadores JSON en producción. Los operadores analizan niveles y atributos de manera confiable.MustCompile por solicitud desperdicia CPU bajo carga.html/template, no con text/template. El escape contextual bloquea XSS de campos de usuario.log para límites heredados hasta que se migren. Los estilos mixtos están bien a corto plazo; planifique slog en main.crypto/rand, nunca con math/rand/v2. Los ID predecibles se convierten en vectores de toma de control de cuentas.math/rand/v2 con valores Rand explícitos en bibliotecas. Elimina el estado global oculto y las pruebas paralelas inestables.gzip.Writer para vaciar los pies de página antes de cargar archivos. Gzip truncado rompe los consumidores posteriores.MinVersion de TLS en 1.2 o superior en los oyentes. Documenta la postura del cifrado para la revisión de seguridad.PingContext a las bases de datos durante el inicio antes de aceptar tráfico. Expone DSNs incorrectos en el momento del despliegue, no en el primer usuario.SetMaxOpenConns y SetConnMaxLifetime a partir de las matemáticas de capacidad de la base de datos. Protege las instancias de base de datos compartidas de un solo servicio.QueryContext y ExecContext en los manejadores HTTP. Respeta los plazos de r.Context() automáticamente.http.Client dedicadas con tiempos de espera por cada sistema ascendente. Nunca confíe en http.DefaultClient en servidores.ReadHeaderTimeout en cada http.Server de producción. Bloquea las detenciones de slowloris antes de que se ejecuten los manejadores.pprof.Do para obtener gráficos de llama atribuibles. De lo contrario, los perfiles muestran fotogramas de tiempo de ejecución anónimos.debug.SetMemoryLimit con los límites de memoria de Kubernetes. Deje margen para pilas y asignaciones fuera de la pila.Cuando la biblioteca estándar carece de la capacidad (grafos de relaciones ORM, DSLs de validación avanzados, SDKs de proveedores) o cuando los estándares organizacionales exigen un envoltorio compartido.
Registre la brecha en el texto de README o ADR.
Migre en los límites del servicio comenzando con main.
Las bibliotecas deben aceptar parámetros *slog.Logger en lugar de forzar valores predeterminados globales.
Use linters de importación (depguard, analizadores personalizados de go vet) para bloquear marcos HTTP duplicados en el mismo módulo sin un archivo de exención.
El código nuevo utiliza math/rand/v2 con fuentes explícitas.
Las funciones globales heredadas de math/rand permanecen por compatibilidad, pero evítelas en las bibliotecas.
Los enrutadores están bien cuando exportan http.Handler y justifican la ergonomía.
Aún aplique las reglas de tiempo de espera, cliente y contexto de la biblioteca estándar debajo.
A menudo sí para escritores sqlite incrustados.
Las bases de datos de servidores como PostgreSQL necesitan agrupaciones más grandes ajustadas a los límites de la instancia.
Después de cada lanzamiento menor de Go y durante las auditorías anuales de dependencias.
Los nuevos paquetes de la biblioteca estándar pueden cerrar brechas que anteriormente requerían módulos.
Sí.
embed reemplaza los pasos de compilación de copia de activos; slog reemplaza los formateadores de registro JSON ad hoc para muchos servicios.
testing y httptest cubren la mayoría de las necesidades.
Agregue testify o similar solo cuando las aserciones de tabla mejoren materialmente la legibilidad y exista consenso en el equipo.
Mantenga un archivo EXCEPTIONS.md o enlaces ADR en línea en comentarios de go.mod que listen los paquetes aprobados que no son de la biblioteca estándar y la brecha de capacidad que llenan.
No.
google.golang.org/grpc llena un protocolo que la biblioteca estándar no distribuye; aún use los patrones de contexto, tls y registro de la biblioteca estándar junto con él.
Importar un marco web completo antes de agotar los valores predeterminados de net/http, slog y database/sql.
Comience de forma mínima; agregue capas cuando se mida el dolor, no cuando se anticipe.
Versiones de pila: Esta página fue escrita para Go 1.26.x (predeterminado de Green Tea GC, modernizadores de go fix - verifique el parche en la compilación), chi (última versión - verifique en la compilación), gin (última versión - verifique en la compilación), echo (última versión - verifique en la compilación), google.golang.org/grpc (última versión - verifique en la compilación), sigs.k8s.io/controller-runtime (última versión - verifique en la compilación), kubebuilder (última versión - verifique en la compilación), tinygo (última versión - verifique los objetivos de la placa en la compilación), wazero (última versión - verifique en la compilación) y golangci-lint (última versión - verifique el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026