Mejores Prácticas para Estudios de Caso
Un resumen condensado de los 25 hábitos más importantes para leer, aplicar y escribir estudios de caso de producción en Go, extraídos de cada página de esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de los 25 hábitos más importantes para leer, aplicar y escribir estudios de caso de producción en Go, extraídos de cada página de esta sección.
Establece primero el contrato operativo: Enumera los SLOs, el objetivo de despliegue y las dependencias antes de copiar código de una compilación de referencia para que los patrones se ajusten a tus restricciones.
Sigue las "vertical slices": Rastrea los flujos de solicitud, datos y despliegue de principio a fin en lugar de leer paquetes en orden alfabético.
Extrae decisiones, no árboles de carpetas: Registra los límites y los contratos de observabilidad en ADRs; evita el "cargo-culting" de rutas de módulos de otra organización.
Separa liveness y readiness: Los endpoints de salud deben ser diferentes para que los orquestadores drenen el tráfico solo cuando las dependencias fallan, no cuando el proceso simplemente está ocupado.
Mantén los puntos de entrada de cmd delgados: main debe conectar la configuración, la observabilidad y los servidores, mientras que las reglas de negocio residen en internal/service e internal/store.
Establece timeouts explícitos en el servidor HTTP: ReadHeaderTimeout, timeouts de lectura/escritura y timeouts inactivos previenen que slowloris y clientes colgados acumulen goroutines.
Ajusta los pools de database/sql: Establece MaxOpenConns, MaxIdleConns y ConnMaxLifetime basándote en el tamaño de la instancia y los límites de la base de datos antes de perseguir micro-optimizaciones del codificador.
Propaga el contexto por consulta: Aplica context.WithTimeout en cada llamada SQL para que una sentencia lenta no herede un vago plazo global solamente.
Correlaciona logs y traces: Inyecta IDs de solicitud y IDs de trace en los manejadores de slog para que los incidentes se unan a métricas, logs y spans sin gimnasia manual de grep.
Impón backpressure en gRPC: Devuelve ResourceExhausted o elimina carga cuando los buffers del suscriptor se llenan, en lugar de permitir que los buses en memoria crezcan sin límite.
Compila módulos gRPC una vez: Reutiliza CompiledModule o rutas equivalentes de calentamiento del servidor; evita la recompilación por solicitud en rutas críticas.
Vincula pprof a interfaces de administración: Nunca expongas debug/pprof en listeners públicos; captura perfiles solo durante pruebas de carga controladas.
Capa cobra y viper limpiamente: Carga la configuración en PersistentPreRunE, pasa cmd.Context() a IO y mantén los paquetes de comandos libres de detalles SQL o SMTP.
Protege los comandos CLI en modo de escritura: Requiere --yes o confirmación interactiva para subcomandos destructivos cuando stdin no es una TTY.
Actualiza solo el estado del operador: Los reconciliadores actualizan los subrecursos status y las condiciones; evita luchar contra los usuarios mutando spec excepto a través de webhooks.
Establece referencias de propietario en los operandos: Los objetos hijos de Kubernetes necesitan referencias de controlador para que las eliminaciones hagan garbage collection de Deployments y recursos relacionados.
Ejecuta envtest antes que clusters en vivo: La lógica del controlador y del webhook debe pasar suites rápidas de envtest en cada PR sin el costo de minikube.
Limita las capacidades del invitado WASM: Los hosts WASI deben permitir la lista de llamadas syscall, memoria limitada y aplicar plazos por invocación para módulos no confiables.
Versiona las ABIs host-invitado: Las pruebas de humo deben afirmar los nombres de exportación y los metadatos ABI para que las actualizaciones de TinyGo no rompan silenciosamente los hosts de wazero.
Caracteriza antes de refactorizar: Bloquea las respuestas doradas de HTTP y las pruebas de comportamiento crítico del servicio antes de dividir un "god package".
Divide el store antes que los manejadores cuando SQL está enredado: Mover las consultas detrás de las interfaces primero elimina el peor acoplamiento en grandes paquetes internal/app.
Cuenta las consultas por solicitud: Los patrones N+1 a menudo ocultan tantos spans hijos rápidos; arregla la forma SQL antes de cambiar las bibliotecas JSON.
Evalúa con -benchmem: Rastrea allocs/op en las rutas críticas del manejador y falla la CI ante regresiones, no solo en ns/op de reloj de pared.
Perfila bajo carga realista: Captura perfiles de CPU y asignación durante RPS sostenido; los perfiles inactivos desvían las prioridades de optimización.
Revisa las historias después de las actualizaciones de la cadena de herramientas: Re-evalúa y relee la compatibilidad del operador/webhook cuando cambian las versiones menores de Go, gRPC o controller-runtime.
Versiones de la pila: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC,
go fix modernizers- verifica el parche en la compilación), chi (última - verifica en la compilación), gin (última - verifica en la compilación), echo (última - verifica en la compilación), google.golang.org/grpc (última - verifica en la compilación), sigs.k8s.io/controller-runtime (última - verifica en la compilación), kubebuilder (última - verifica en la compilación), tinygo (última - verifica los objetivos de placa en la compilación), wazero (última - verifica en la compilación) y golangci-lint (última - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 19 jul 2026