Prácticas recomendadas de arquitectura y diseño
Evoluciona bases de código Go sin reescrituras de 'big bang'.
Busca en todas las páginas de la documentación
Evoluciona bases de código Go sin reescrituras de 'big bang'.
Estos hábitos mantienen los servicios testeables, los módulos publicables y las refactorizaciones incrementales a medida que cambian los requisitos.
golangci-lint depguard y reuniones de arquitectura.cmd/. main construye tipos concretos; las bibliotecas exponen funciones New.internal/ para implementación no pública. Deja que el compilador imponga los límites de los módulos.context.Context a través de las rutas de solicitud. La cancelación pertenece a los métodos de servicio y repositorio.internal/billing es mejor que carpetas solo de capas que se importan mutuamente.errgroup para concurrencia acotada. Vincula la vida útil de las goroutines al context de la solicitud.go mod tidy antes de fusionar. Los gráficos limpios reducen las sorpresas en las actualizaciones en CI./v2 y notas de migración.%w consistentemente. Los manejadores mapean con errors.Is, no con comparación de cadenas.go test ./... y go vet ./... en CI. Agrega golangci-lint con depguard para globales y ciclos.slog o el estándar del equipo con IDs de rastreo/solicitud en los bordes.go build en el servidor.main. Drena las solicitudes en curso en SIGTERM antes de salir.Composición en cmd/, división manejador-servicio, internal/ y contexto en I/O.
Agrega ADRs y OTel antes de escalar entre equipos.
Permite paquetes solo de prueba o etiquetas de compilación para ayudantes de integración.
Bloquea var globalDB en rutas que no sean cmd/ primero.
Cuando refleja una API externa estable que no puedes dividir (fachada de SDK en la nube).
Envuelve y reduce en tu límite.
No.
Cableado manual hasta que la duplicación duela; ADR el cambio a generación de código.
Disciplina más estricta de API exportada, etiquetas semver y dependencias mínimas.
Sin main; los consumidores cablean tus constructores.
Mantén el código generado en los paquetes api/ o gen/.
Mapea a tipos de dominio en adaptadores.
Trimestralmente o después de un Sev1 causado por acoplamiento/globales.
Usa la lista de verificación de refactorización para la puntuación.
Sí; las prácticas se refieren a la dirección de las dependencias, no a los nombres de las carpetas.
Usa los modernizadores go fix y la directiva go actual en go.mod.
ADR los cambios importantes de la cadena de herramientas.
Nuevo estado global mutable para dependencias con ámbito de solicitud.
Recházalo a menos que un ADR explique la necesidad heredada inevitable.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, modernizadores
go fix- verificar parche en la compilación), chi (última versión - verificar en la compilación), gin (última versión - verificar en la compilación), echo (última versión - verificar en la compilación), google.golang.org/grpc (última versión - verificar en la compilación), sigs.k8s.io/controller-runtime (última versión - verificar en la compilación), kubebuilder (última versión - verificar en la compilación), tinygo (última versión - verificar objetivos de placa en la compilación), wazero (última versión - verificar en la compilación) y golangci-lint (última versión - verificar conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026