Samuel Soto Hoyos
student•
hace 9 meses
Aquí están las buenas prácticas al usar módulos Go, basadas en la información proporcionada:
- Comprender la organización del código con módulos:
- Los programas Go se estructuran en paquetes, que son colecciones de archivos fuente en el mismo directorio que se compilan juntos.
- Un módulo es un conjunto de paquetes Go relacionados que se liberan de forma conjunta. Un repositorio Go, por convención, contiene un único módulo en su directorio raíz.
- El archivo en la raíz del módulo declara la ruta del módulo, la cual sirve como prefijo de la ruta de importación para todos los paquetes dentro de ese módulo.
go.mod - La ruta del módulo también es utilizada por el comando para saber dónde descargar el módulo desde un repositorio remoto, por ejemplo, para
go.golang.org/x/tools - Una ruta de importación para un paquete se forma uniendo la ruta del módulo con la ruta del subdirectorio del paquete dentro del módulo (ej., ). Los paquetes de la librería estándar no tienen un prefijo de ruta de módulo.
github.com/google/go-cmp/cmp
- Inicialización y gestión de dependencias:
- Para iniciar un proyecto con módulos, ejecute . Esto creará un archivo
go mod init <ruta_del_módulo>que rastreará las versiones de las dependencias de su proyecto.go.mod - Para agregar, actualizar o degradar una dependencia, utilice el comando . Por ejemplo,
go getestablecerá una versión específica de una dependencia.go get golang.org/x/text@v0.3.5 - Es una buena práctica usar para añadir automáticamente los requisitos de módulo faltantes para los paquetes importados y eliminar los requisitos de módulos que ya no se utilizan, manteniendo su archivo
go mod tidylimpio y preciso.go.mod - Las dependencias del módulo se descargan en el subdirectorio dentro de su
pkg/mod. Puede eliminar todos los módulos descargados conGOPATH.go clean -modcache
- Para iniciar un proyecto con módulos, ejecute
- Compatibilidad y versionado semántico:
- Los paquetes dentro de los módulos deben mantener la compatibilidad hacia atrás (backward compatibility) a medida que evolucionan, siguiendo la "regla de compatibilidad de importación". Esto significa que si un paquete antiguo y uno nuevo tienen la misma ruta de importación, el nuevo debe ser compatible con el antiguo.
- Como parte de la compatibilidad de Go 1, se aconseja no eliminar nombres exportados y fomentar el uso de literales compuestos etiquetados. Si necesita una funcionalidad diferente que rompa la compatibilidad, la práctica es añadir un nuevo nombre en lugar de modificar uno antiguo.
- Para rupturas de compatibilidad, se utiliza el versionado semántico y el versionado de importación semántico. Los módulos en su versión 2 o superior (ej., ) deben incluir un sufijo de versión mayor en su ruta (ej.,
v2). Esto asegura que paquetes en diferentes versiones mayores de un módulo tengan rutas de importación distintas, manteniendo la compatibilidad para los importadores./v2
- Gestión de la cadena de herramientas Go:
- A partir de Go 1.23, puede utilizar para gestionar la cadena de herramientas Go como si fuera cualquier otra dependencia. Esto permite que Go descargue automáticamente las versiones actualizadas de la cadena de herramientas cuando sea necesario.
go get - Si su proyecto depende de un código que requiere una versión más reciente de Go (ej., Go 1.24), Go actualizará la directiva en su archivo
gopara reflejar este requisito y automáticamente buscará el entorno de ejecución de Go 1.24.go.mod
- A partir de Go 1.23, puede utilizar
- Recomendaciones generales para el desarrollo Go:
- Aunque puede definir módulos localmente, es una buena práctica organizar su código como si fuera a publicarlo algún día en un repositorio remoto.
