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

sha*_*hin 174 go

看看golang软件包的发展和改进程度如何,我想知道软件包版本的问题是如何解决的?

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

但是,如果我安装它go get会怎么样?

tux*_*21b 282

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

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

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

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

  • 应该只是'去得到-u all'抱歉复活,但以防万一其他人在寻找. (71认同)
  • 谢谢!`go get -u`是我想到的 (4认同)
  • Go 1.16.3,“go get -u all”不起作用。有替代品吗? (4认同)
  • 是否可以将所有包更新到最新版本,有点像捆绑更新? (2认同)

Sal*_*ali 55

@tux答案很棒,只想添加你可以使用go get来更新特定的包:

go get -u full_package_name
Run Code Online (Sandbox Code Playgroud)


dtx*_*dtx 14

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

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

go get -u github.com/... // ('...' being the wildcard). 
Run Code Online (Sandbox Code Playgroud)

这将继续,只在当前更新您的github包 $GOPATH

同样适用于VCS,也就是说你只想从ogranizaiton A的repo升级所有包,因为他们已经发布了你依赖的修补程序:

go get -u github.com/orgA/...
Run Code Online (Sandbox Code Playgroud)


Aus*_*Aus 10

上述答案有以下问题:

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

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

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


Luk*_*e W 6

要指定版本或提交:

go get -u otherpackage@1.2.3

go get -u otherpackage@git-sha
Run Code Online (Sandbox Code Playgroud)

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


小智 6

由于这是谷歌搜索时最热门的搜索结果之一,我只是想补充一下,对于 1.17,“不推荐在模块模式下使用‘go get’安装可执行文件”。

  • go get -d
    • 对于当前模块的依赖
  • go install
    • 针对当前模块的要求
  • go install <with_version>
    • 要安装忽略当前模块,即:“go install example.com/cmd@latest”

https://golang.org/doc/go-get-install-deprecation