¿Cómo administrar dependencias de terceros en Go?
Go no posee un manejador de paquetes, como si o tienen lenguajes como Python o Node.js, aunque deb es una posible alternativa en continuo desarrollo.
Consideremos que tenemos una serie de paquetes disponibles.
- ¿Cómo se actualiza un paquete que ya ha sido instalado?
- ¿Cómo se especifica una versión del paquete a usar?
El comando get
permite actualizar un paquete o todos los paquetes.
Si deseamos actualizar las dependencias de un proyecto…
$ go get -u
Si deseamos actualizar un paquete específico.
$ go get -u github.com/autor/paquete
Si deseamos actualizar todos los paquetes instalados.
$ go get -u all
El comportamiento de go get
es el descargar todo el código de la branch remota que coincida con la branch referenciada. Es decir que al actualizar, hace una descarga de lo que se encuentra en la branch master.
En la versión 1.5 de Go, existe un folder vendor. Esto soporta el uso de múltiples paquetes de terceros. Esto quiere decir que en lugar de instalar paquetes de forma global, es instalado directamente dentro del proyecto.
ejemplo/
ejemplo.go
vendor
github.com
autor
paquete
funcion
funcion.go
funcion_test.go
Las ventajas del uso de vendor son:
- Los paquetes se mantienen en una versión específica.
- No se requiere un servidor de compilación que descargue las dependencias.
Si has trabajado con lenguajes de programación que utilizan manejadores de paquetes notarás que:
- Las dependencias deben ser incluidas en el repositorio.
- Se desconoce en un inicio la versión que sera utilizada.
- Las dependencias dentro de un paquete no son administradas.
- No es posible especificar el commit exacto o branch a utilizar.