¿Cómo actualiza Go los paquetes de terceros?

190

Mirando qué tan activamente crecen y mejoran los paquetes de golang, me pregunto cómo se resuelve el problema con las versiones de paquetes.

Veo que una forma es almacenar paquetes de terceros en una carpeta de proyecto.

¿Pero qué pasa si lo instalo go get?

shalakhin
fuente

Respuestas:

311

go getinstalará el paquete en el primer directorio listado en GOPATH(una variable de entorno que puede contener una lista de directorios separados por dos puntos). Puede usar go get -upara actualizar paquetes existentes.

También puede usar go get -u allpara actualizar todos los paquetes en suGOPATH

Para proyectos más grandes, puede ser razonable crear diferentes GOPATH para cada proyecto, de modo que actualizar una biblioteca en el proyecto A no cause problemas en el proyecto B.

Escriba go help gopathpara obtener más información sobre la GOPATHvariable de entorno.

tux21b
fuente
2
¿Es posible actualizar todos los paquetes a la última versión, como una actualización de paquete?
chourobin
73
debería go get -u all arrepentirme de resucitar, pero en caso de que alguien más estuviera mirando.
Dan Anderson
go get -u allya no funciona! Ejecutar este comando en GOPATH, al menos para Go 1.13, devolverá una advertencia: `advertencia" todos "no coincidieron con ningún paquete"
Contrapak
Funciona con Go 1.12.9
fviktor
61

La respuesta de @tux es excelente, solo quería agregar que puede usar ir a actualizar un paquete específico:

go get -u full_package_name
Salvador Dalí
fuente
18

Como la pregunta menciona bibliotecas de terceros y no todas paquetes, entonces probablemente desee recurrir al uso de comodines.

Un caso de uso es: solo quiero actualizar todos mis paquetes que se obtienen del Github VCS, entonces simplemente diría:

go get -u github.com/... // ('...' being the wildcard). 

Esto continuaría y solo actualizaría sus paquetes de github en el actual $GOPATH

Lo mismo se aplica también dentro de un VCS, digamos que solo desea actualizar todos los paquetes de los repositorios de ogranizaiton A ya que han lanzado una revisión de la que depende:

go get -u github.com/orgA/...
dtx
fuente
11

Las respuestas anteriores tienen los siguientes problemas:

  1. Actualizan todo, incluida su aplicación (en caso de que haya cambios no confirmados).
  2. Han actualizado paquetes que quizás ya haya eliminado de su proyecto pero que ya están en su disco.

Para evitarlos, haga lo siguiente:

  1. Elimine las carpetas de terceros que desea actualizar.
  2. ve a la carpeta de tu aplicación y ejecuta go get -d
Aus
fuente
2

ir 1.13

(exec del directorio raíz del módulo)

Actualizar dependencias especificadas:

go get -u <package-name>

Actualice todas las dependencias directas e indirectas a las últimas actualizaciones menores o parches (se ignoran las versiones preliminares):

go get -u ./...
# or
go get -u=patch ./...

Referencia:

https://github.com/golang/go/wiki/Modules#daily-workflow

go help get

F566
fuente
-2

Ir al camino y escribir

go get -u ./..

Actualizará todos los paquetes requeridos.

kiki_ygn
fuente
Esta interpretación literal no funciona. Un poco más de contexto sería útil.
Contrapak
2
Creo que quiso decir go get -u ./...(3 puntos)
Brian Leishman