Go如何更新第三方包?

看看golang包是如何积极地成长和改进的,我想知道包版本的问题是如何解决的?

我认为一种方法是将第三方包存储在项目文件夹下。

但是如果我用go get安装它呢?

162969 次浏览

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

你也可以使用go get -u all来更新你的GOPATH中的所有包

对于较大的项目,为每个项目创建不同的gopathath可能是合理的,这样在项目a中更新库就不会在项目B中引起问题。

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

@tux的回答很好,只是想补充一点,你可以使用来更新特定的包:

go get -u full_package_name

由于问题提到了< em >第三方< / em >库而不是< em > < / em >包,那么你可能想要使用通配符。

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

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

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

同样也适用于VCS,假设你只想从ograniziton a的回购中升级所有的包,因为他们已经发布了一个你依赖的热修复:

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

以上答案存在以下问题:

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

为了避免这些,请采取以下措施:

  1. 删除要更新的第三方文件夹。
  2. 进入你的app文件夹并运行go get -d

进入path并键入

go get -u ./...

它将更新所有的require包。

走1.13

(exec from模块根目录)

更新指定的依赖项:

go get -u <package-name>

更新所有对最新的小版本或补丁升级的直接和间接依赖(忽略预发布版):

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

参考:

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

go help get

指定版本或提交:

go get -u otherpackage@1.2.3


go get -u otherpackage@git-sha

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

由于这是谷歌搜索时最热门的搜索结果之一,我只是想补充一句,对于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