Una introducción a dep: cómo administrar las dependencias de tu proyecto Golang

dep: una herramienta de gestión de dependencias Go

Actualización @ 2018–11–26: la tecnología no solo se mueve a una velocidad vertiginosa sino que también cambia rápidamente. ¡Dentro de un año, este artículo está desactualizado!

Y de acuerdo con la página del proyecto dep:

dep fue el "experimento oficial". La cadena de herramientas Go, a partir de 1.11, ha adoptado (experimentalmente) un enfoque que difiere bruscamente de dep. Como resultado, estamos continuando el desarrollo de dep, pero estamos trabajando principalmente para el desarrollo de un prototipo alternativo para el comportamiento de versiones en la cadena de herramientas.

Para obtener más información sobre la nueva administración integrada de Go, consulte el Wiki oficial de GitHub - Módulos Go 1.11.

Gracias John Arundel @bitfield y Erhan Yakut @yakuter por revelar el problema.

-

Actualización @ 2018–02–03: Sam Boyer, del equipo de Godep, ha aclarado información incorrecta en este artículo. Pido disculpas a Sam Boyer y a los lectores por cualquier inconveniente.

-

Anteriormente, publiqué un artículo sobre la gestión de dependencias en Go usando Glide. Recibí un comentario de que Glide se volverá obsoleto. El equipo de Glide sugiere que los usuarios cambien a otra herramienta de administración de dependencias llamada dep, escrita por el equipo de Golang.

La comunidad Go ahora tiene el proyecto dep para administrar dependencias. Considere intentar migrar de Glide a dep. Glide continuará siendo compatible durante algún tiempo, pero se considera que se encuentra en un estado de soporte en lugar de desarrollo de características activas.

Hay un plan sobre la integración de dep en la cadena de herramientas en la versión Go 1.10, pero parece que todavía tiene mucho camino por recorrer.

Actualización @ 2018–02–03:

  • dep es lanzado oficialmente.
  • dep no se está moviendo a la cadena de herramientas con 1.10. consulte la hoja de ruta para obtener la información más reciente.
Y simplemente no soy lo suficientemente rápido.

Crea el proyecto dentro de $ GOPATH

La carpeta del proyecto debe estar dentro de $ GOPATH para resolver las rutas de Gopackage. Creemos un nuevo proyecto en $ GOPATH / src / gitlab.com / ykyuen / dep-example y agreguemos el siguiente archivo.

main.go

La manera dep

Gopkg.toml y Gopkg.lock

dep lee dos archivos llamados Gopkg.toml y Gopkg.lock. Inicialicemos estos 2 archivos con el comando dep init.

[ykyuen @ camus dep-example] $ dep init
  Usar master como restricción para direct dep github.com/dustin/go-humanize
  Bloqueo en master (bb3d318) para direct dep github.com/dustin/go-humanize

Como puede ver, el comando dep init escanea los códigos fuente y descarga todos los paquetes necesarios para el proyecto en la carpeta del proveedor.

El Gopkg.lock cumple exactamente la misma función que el archivo glide.lock. Bloquea la versión de los paquetes EXCEPTO que la versión debe mantenerse en Gopkg.toml. En resumen, el archivo Gopkg.lock se genera automáticamente y depende de las declaraciones de importación en la versión de origen controlada por Gopkg.toml.

Actualizar la versión de la dependencia

Editemos el archivo Gopkg.toml y usemos una versión un poco más antigua del paquete go-humanize en lugar de la última rama maestra.

Luego ejecute dep asegúrese de actualizar el paquete a la versión deseada. El siguiente es el diferencial del Gopkg.lock actualizado.

Agregar una nueva dependencia

Se puede agregar un nuevo paquete utilizando el comando dep sure -add.

[ykyuen @ camus dep-example] $ dep sure -add github.com/leekchan/accounting
Obteniendo fuentes ...
"github.com/leekchan/accounting" no es importado por su proyecto, y se ha agregado temporalmente a Gopkg.lock y vendor /.
Si ejecuta "dep sure" nuevamente antes de importarlo, desaparecerá de Gopkg.lock y vendor /.

Ahora tenemos el nuevo paquete de contabilidad listo en la carpeta del proveedor con nuevas restricciones escritas en Gopkg.toml y bloqueadas en Gopkg.lock. Actualicemos main.go de la siguiente manera.

main.go

Y ejecútalo.

[ykyuen @ camus dep-example] $ go run main.go
Hola Mundo
Ese archivo tiene 83 MB.
Eres mi 193 mejor amigo.
Debes $ 6,582,491.
$ 123,456,789.21
$ 12,345,678.00
$ 25,925,925.67
- $ 25,925,925.67
$ 123,456,789.21

El problema con el submódulo git

Una diferencia importante de dep en comparación con Glide es que se ignora el submódulo del paquete. Por ejemplo, después de agregar el paquete go-goracle / goracle por dep, el submódulo odpi dentro está vacío y conduce a un error. La razón para soltar el submódulo se puede encontrar en el siguiente enlace.

  • ¿Hay planes para agregar soporte para submódulos Git?

Actualización @ 2018–02–03:

El párrafo sobre los submódulos de Git es incorrecto.

Sam Boyer escribió:

dep debería estar perfectamente bien tirando de submódulos git en el caso que describas. Acabo de replicar lo que describe aquí localmente, y el problema no son los submódulos: es que no hay un código Go en github.com/go-goracle/goracle/odpi, por lo que no se puede importar directamente.
Es probable que necesite desactivar la poda de paquetes no utilizados en Gopkg.toml para ese proyecto específicamente, ya que de lo contrario, dep garantiza eliminará automáticamente lo que parece ser un no utilizado directamente (pero parece que realmente lo está utilizando cgo).

Actualización @ 2018–03–04:

Se encuentra que el paquete go-goracle / goracle no funciona con dep. Puede seguir el problema a continuación y verificar la última actualización del equipo de dep.

  • Error al obtener el submódulo git de un paquete después del comando de garantizar dep

Resumen

  • DEP es muy probable que sea el funcionario de la dependencia de gestión de herramientas en el ̶̵̶G̶̵̶o̶̵̶l̶̵̶a̶̵̶n̶̵̶g̶̵̶ ̶̵̶c̶̵̶o̶̵̶m̶̵̶m̶̵̶u̶̵̶n̶̵̶i̶̵̶t̶̵̶y̶̵̶.̶̵̶
  • I̶̵̶f̶̵̶ ̶̵̶y̶̵̶o̶̵̶u̶̵̶ ̶̵̶a̶̵̶r̶̵̶e̶̵̶ ̶̵̶s̶̵̶t̶̵̶a̶̵̶r̶̵̶t̶̵̶i̶̵̶n̶̵̶g̶̵̶ ̶̵̶a̶̵̶ ̶̵̶n̶̵̶e̶̵̶w̶̵̶ ̶̵̶G̶̵̶o̶̵̶l̶̵̶a̶̵̶n̶̵̶g̶̵̶ ̶̵̶p̶̵̶r̶̵̶o̶̵̶j̶̵̶e̶̵̶c̶̵̶t̶̵̶;
  • Si está utilizando se deslizan en un legado ̶p̶r̶o̶j̶e̶c̶t̶.̶ usted podría considerar la migración a DEP pero creo que no hay ningún daño para seguir usando deslizan por un tiempo hasta DEP está oficialmente ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • Además, ̶ faltante ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ submódulo puede resultar en mal funcionamiento de su ̶c̶o̶d̶e̶.̶
  • dep es lanzado oficialmente.
  • dep funciona bien al extraer el submódulo git.
  • Use la biblioteca estándar siempre que sea posible. (Sugerido por philoserf)
  • Puedes ver este ejemplo en gitlab.com.

- Publicado originalmente en Boatswain Blog.