Go如何更新第三方软件包?


189

寻找golang软件包如何积极地增长和改进,我想知道软件包版本的问题如何解决?

我看到一种方法是将第三方程序包存储在项目文件夹下。

但是,如果我将其安装在一起go get怎么办?

Answers:


308

go get会将软件包安装在列出的第一个目录中GOPATH(环境变量可能包含用冒号分隔的目录列表)。您可以go get -u用来更新现有软件包。

您还可以go get -u all用来更新您的所有软件包GOPATH

对于大型项目,为每个项目创建不同的GOPATH可能是合理的,因此更新项目A中的库不会导致项目B中的问题。

键入go help gopath以查找有关GOPATH环境变量的更多信息。


2
是否可以将所有软件包更新到最新版本,例如捆绑更新?
chourobin

73
应该go get -u all 为复活感到遗憾,但以防万一其他人正在寻找。
Dan Anderson

go get -u all不再有效!至少在Go 1.13中,在GOPATH中运行此命令将返回警告:“警告“所有”匹配的软件包不对”
Contrapak

与Go 1.12.9一起使用
fviktor


18

由于问题提到的是第三方库,而不是所有软件包,因此您可能希望退回使用通配符。

一个用例是:我只想更新从Github VCS获得的所有软件包,那么您会说:

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

这将继续进行,并且仅在当前版本中更新您的github包 $GOPATH

同样,这也适用于VCS,例如,您只想从ogranizaiton A的仓库中升级所有软件包,因为它们已经发布了您依赖的修补程序:

go get -u github.com/orgA/...

11

上述答案存在以下问题:

  1. 他们会更新包括您应用程序在内的所有内容(以防您未提交更改)。
  2. 他们更新了您可能已经从项目中删除但已经在磁盘上的软件包。

为避免这些,请执行以下操作:

  1. 删除您要更新的第三方文件夹。
  2. 转到您的应用程序文件夹并运行 go get -d



-2

转到路径并输入

go get -u ./..

它将更新所有需要的软件包。


这种字面解释不起作用。一些更多的上下文会有所帮助。
Contrapak

2
我确实相信他的意思go get -u ./...(3个点)
Brian Leishman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.