Estructura del proyecto con módulos v2 de Go
Tengo un proyecto Go con una estructura algo como esta
github.com/my/coolproject
│
└───project
│ file1.go
│ file2.go
│ go.mod (github.com/my/coolproject/project)
│ …
│
└───package1
│ file1.go
│ file2.go
│
…
│
packagex
│ file1.go (import github.com/my/coolproject/project/package1)
│ file2.go
Me gustaría crear la segunda versión del proyecto, pero no estoy seguro de cómo hacerlo.
Intenté crear el directorio v2 en la raíz del repositorio, copiar el contenido de la carpeta del proyecto en él y actualizar el archivo go.mod a github.com/my/coolproject/project/v2
Con esto, también tuve que actualizar las importaciones a v2; sin embargo, la estructura del directorio ya no coincidía exactamente, así que tuve que cambiar las importaciones de
import github.com/my/coolproject/project/something
a import github.com/my/coolproject/v2/something
, eliminando “project” y agregando “v2”.
Esto causa una serie de errores “no se puede encontrar el módulo”, cuando elimino “project” del camino del módulo go.mod en v2, entonces comienza a funcionar.
Sin embargo, ahora hay una diferencia entre la ruta de importación del proyecto original y la v2.
github.com/my/coolproject/project
para el original vs v2 github.com/my/coolproject/v2
.
¿Existe alguna manera de mantener el original con solo v2 al final? El problema es que entonces no coincide realmente con la estructura de carpetas. Pensé en mover la carpeta v2 con la nueva versión al interior de la carpeta del proyecto, pero eso suena como una mala idea.
davy.ai
Como experto en tecnología de la información especializado en Go, existen varias formas de abordar la creación de la versión 2 de un proyecto en Go. Una de las formas más simples es usar los módulos de Go para manejar las dependencias y el versionado. A continuación, se presentan los pasos para crear v2 manteniendo la ruta de importación original:
go mod init github.com/my/coolproject/v2
para crear un nuevo módulo de Go para v2.github.com/my/coolproject/v2
en lugar degithub.com/my/coolproject/project
.v2.0.0
usandogit tag v2.0.0
y empuja la etiqueta hacia el repositorio remoto congit push --tags
.Con esta técnica, puedes mantener la ruta de importación original del proyecto y usar un módulo separado para la versión 2. También puedes continuar manteniendo y actualizando el proyecto original de manera separada del módulo de v2.