231

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

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

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

4

8 回答 8

356

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

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

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

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

于 2012-04-30T12:33:40.337 回答
84

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

go get -u full_package_name
于 2015-11-23T08:36:22.950 回答
24

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

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

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

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

这同样适用于 VCS,假设您只想升级 ogranizaiton A 的 repo 中的所有软件包,因为他们已经发布了您所依赖的修补程序:

go get -u github.com/orgA/...
于 2015-12-21T07:40:33.140 回答
13

上述答案存在以下问题:

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

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

  1. 删除要更新的第 3 方文件夹。
  2. 转到您的应用程序文件夹并运行go get -d
于 2017-02-04T23:16:26.947 回答
7

要指定版本或提交:

go get -u otherpackage@1.2.3

go get -u otherpackage@git-sha

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

于 2020-05-06T19:53:04.890 回答
4

去 1.13

(从模块根目录执行)

更新指定的依赖项:

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

于 2020-02-20T09:23:19.663 回答
2

由于这是谷歌搜索时最热门的内容之一,我只想为 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

于 2021-08-30T07:37:05.183 回答
0

转到路径并输入

go get -u ./...

它将更新所有需要的包。

于 2018-02-12T04:46:12.170 回答