Paquetes, Módulos y Mejores Prácticas de Diseño de Proyectos
Higiene de módulos, convenciones de etiquetado y publicación.
Busca en todas las páginas de la documentación
Higiene de módulos, convenciones de etiquetado y publicación.
Estos hábitos mantienen los grafos de importación pequeños, los lanzamientos predecibles y los monorepos mantenibles a medida que los equipos crecen.
go mod tidy, go test ./..., go vet ./..., y golangci-lint en CI./v2 para bibliotecas).github.com/org/repo o tu dominio real para que go get se resuelva para siempre.go.mod y go.sum juntos. Las compilaciones reproducibles y la verificación de checksum dependen de ambos archivos.go mod tidy antes de cada fusión y etiqueta de lanzamiento. Los huérfanos y los indirectos faltantes nunca deberían sorprender a CI./v2 en la ruta del módulo y en las rutas de importación.go get module@version intencional. Evita @latest a ciegas en la rama principal de producción sin revisar el changelog.go mod why -m para justificar nuevos módulos transitivos. Elimina peso no utilizado antes de que se arraigue.GOPRIVATE para módulos privados y deshabilita sumdb donde sea apropiado. Documenta la autenticación de VCS para CI y portátiles.go.work sobre rutas replace específicas de la máquina en ramas compartidas. Las anulaciones locales pertenecen a los archivos de espacio de trabajo o a la configuración de desarrollo documentada.cmd/ delgado; inyecta la orquestación en main, la lógica en otro lugar. Un paquete main por binario bajo cmd/<nombre>/.internal/. Deja que el compilador imponga los límites en lugar de solo las advertencias de README.util o common. Nombres cortos en minúsculas; evita el tartamudeo de importación en los sitios de llamada.pkg/ o de biblioteca de nivel superior.go test ./... y go vet ./... en cada candidato a etiqueta. Los consumidores de módulos heredan tu barra de calidad./v2.go mod vendor ayuda a CI sin conexión; no dejes que el vendor se pudra en silencio.go.mod adicionales añaden coste operativo.go.work raíz cuando los equipos co-desarrollan módulos diariamente. Documenta las comprobaciones de GOWORK=off para la validación de la publicación.internal/ entre módulos. internal no abarca límites de módulos, incluso en un solo repositorio Git.Cuando elimines o cambies APIs exportadas de forma incompatible.
Publica example.com/lib/v2 y mantén v1 en la ruta antigua hasta que la depreciación se complete.
Solo para forks permanentes con acuerdo de equipo.
Las rutas locales temporales pertenecen a go.work o a la documentación del desarrollador, no a ramas principales compartidas.
Etiqueta cuando los consumidores necesiten un punto de actualización reproducible.
Etiquetas de parche para correcciones, menores para características compatibles con versiones anteriores.
No, la claridad importa más que el nombre de la carpeta.
Documenta las rutas de importación admitidas en README independientemente de la disposición.
La cadena de herramientas de Go mínima que tu módulo requiere para características del lenguaje.
Auméntala deliberadamente al adoptar nuevas bibliotecas estándar o sintaxis.
Las aplicaciones son módulos principales; los cambios que rompen la compatibilidad son internos.
Las bibliotecas deben disciplina semver y /v2 a los importadores descendentes.
go list -m all, escáneres de dependencias y go mod tidy periódico después de refactorizaciones.
Elimina primero los requisitos directos no utilizados.
Compilaciones sin conexión, recuperación ante desastres o rastros de auditoría estrictos de terceros.
Combina con la actualización automática de vendor en CI.
Trátalo como un cambio que rompe la compatibilidad: nueva ruta, guía de migración y posiblemente un aumento de versión principal.
La ruta antigua puede necesitar un módulo de compatibilidad o una redirección en README.
Pruebas, vet, diff limpio de tidy, etiqueta correcta en el commit y LICENSE presente.
La ingesta del proxy es eventual; verifica con go list -m -versions después de enviar la etiqueta.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, go fix modernizadores - verifica el parche en la compilación), chi (última versión - verifica en la compilación), gin (última versión - verifica en la compilación), echo (última versión - verifica en la compilación), google.golang.org/grpc (última versión - verifica en la compilación), sigs.k8s.io/controller-runtime (última versión - verifica en la compilación), kubebuilder (última versión - verifica en la compilación), tinygo (última versión - verifica los objetivos de placa en la compilación), wazero (última versión - verifica en la compilación), y golangci-lint (última versión - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026