Si ya has estado experimentando un poco con el lenguaje de programación GO habrás descubierto que cada vez que quieres usar un nuevo paquete, éste se te descarga en el GOPATH de forma que usar versiones determinadas en cada proyecto se vuelve imposible.
Por suerte para nosotros tenemos varias alternativas a la gestión de dependencias en GO pero desde la versión 1.11 del mismo lo tenemos de forma nativa.
Si no estás familiarizado con la gestión de dependencias en general te aconsejo que leas un poco sobre el tema antes de continuar.
Adiós GOPATH
Una de las grandes ventajas de empezar a usar Go Modules es que ya no necesitaremos del GOPATH
para crear nuestro proyecto, sino que podremos inicializar nuestro proyecto en el directorio donde queramos.
Activar GO Mod para seguir usando GOPATH
Por defecto Go Modules no viene activado para ser usado en GOPATH, pero si queremos utilizarlo será tan sencillo como activar la variable de entorno que nos ofrecen.
$ echo "export GO111MODULE=on" >> ~/.bash_profile
$ source ~/.bash_profile
Es decir básicamente cambiar el valor de la variable de entorno GO111MODULES a on con esto ya tendríamos Go Modules funcionando en nuestro GOPATH
.
¿Sencillo no?
Empezar a usar Go Mod en nuestro proyecto
Ahora ya lo tenemos activado, pero queremos poder empezar a usarlo, nada más sencillo que ejecutar el siguiente comando en nuestra consola
$ go mod init <modulename>
Module name será el nombre que queramos darle a nuestro modulo, normalmente será el nombre del propio proyecto. También advertir que este nombre debería ser lo más único posible, porque si tenemos colisiones con otros nombres de módulo, bueno digamos que no será divertido.
Esto nos creará un fichero go.mod
el cual no tendremos que tocar para nada.
Descarguemos las dependencias
Una vez hemos inicializado Go Modules en nuestro proyecto, podemos descargar las dependencias del mismo, esto servirá tanto para la primera vez como para cada vez que añadamos una nueva dependencia.
$ go mod tidy
¿Cuáles son las funciones de go mod tidy?
go mod tidy
incluye en nuestro go.mod
todas las dependencias necesarias para nuestros tests, de manera que si un test falla, sabremos cual es la dependencia que utiliza para reproducir el error.
go mod tidy
también se asegura de que tu fichero go.mod
refleje las dependencias de todas las posibles combinaciones de Sistema Operativo, arquitecura y build tags. Al contrario que el comando go build
y go test
que sólo actualizará el fichero go.mod
con los paquetes necesarios para los actuales GOOS
, GOARCH
y build tags.
go mod tidy
creará el fichero go.sum
sino existe el cual se encargará de gestionar nuestras versiones e indicar el hash de integridad de cada una de ellas, este fichero tampoco deberemos de estar modificandolo, además nos permite dejar de utilizar el comando go get ./...
o go get -u ./...
A partir de ahora las líberias que se descarguen seran basándose en semantic version y un control de integridad de una versión según la que esté utilizando el proyecto en ese momento. Con esto es capaz de saber si por ejemplo al bajar una tag, alguien ha modificado esa tag y ya no es igual que la que tu usabas en ese momento.
Compatibilidad con vendoring
Si vienes de usar dep u otro sistema similar sabrás que hasta ahora las dependencias se gestionaban dentro de la carpeta vendor
, incluso que teníamos que comitearla para evitar posibles discordancias entre las líbrerias que usaba cada developer, o como se generarían los builds a producción.
Como hemos podido ver gracias a como funciona GO Modules esto no sería necesario, pero si queremos mantener la compatibilidad hasta que Go Modules termine de asentarse tendremos que mantener la carpeta vendor
. Tranquilos como todo en GO es realmente sencillo.
$ go mod vendor
Y listo ya tendremos nuestras dependencias guardadas como se hacía hasta ahora.
Como véis en tres sencillos pasos hemos podido configurar nuestro proyecto para que empiece a funcionar con Go Modules, en próximos artículos hablaremos de como migrar un proyecto que esté usando Dep o Glide para que empiece a usar Go Modules
Ahora te toca a ti experimentar con esta maravillosa funcionalidad que ha incorporado GO, cualquier duda o comentario, incluso propuestas para nuevos artículos lo podéis dejar en la caja de comentarios de abajo.