看看 golang 包是如何积极增长和改进的,我想知道包版本的问题是如何解决的?
我看到一种方法是将第三方包存储在项目文件夹下。
但是如果我安装它go get
呢?
go get
将在列出的第一个目录中安装软件包GOPATH
(环境变量可能包含冒号分隔的目录列表)。您可以使用go get -u
来更新现有的包。
您还可以使用go get -u all
更新您的所有软件包GOPATH
对于较大的项目,为每个项目创建不同的 GOPATH 可能是合理的,这样更新项目 A 中的库不会导致项目 B 出现问题。
键入go help gopath
以了解有关GOPATH
环境变量的更多信息。
@tux 答案很好,只是想补充一点,您可以使用go get来更新特定的包:
go get -u full_package_name
由于问题提到了第三方库而不是所有包,因此您可能希望回退到使用通配符。
一个用例是:我只想更新从 Github VCS 获得的所有包,然后你会说:
go get -u github.com/... // ('...' being the wildcard).
这将继续进行并且仅在当前更新您的 github 包$GOPATH
这同样适用于 VCS,假设您只想升级 ogranizaiton A 的 repo 中的所有软件包,因为他们已经发布了您所依赖的修补程序:
go get -u github.com/orgA/...
上述答案存在以下问题:
要避免这些,请执行以下操作:
go get -d
要指定版本或提交:
go get -u otherpackage@1.2.3
go get -u otherpackage@git-sha
去 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
由于这是谷歌搜索时最热门的内容之一,我只想为 1.17 添加“不推荐在模块模式下使用 'go get' 安装可执行文件”。
go get -d
go install
go install <with_version>
转到路径并输入
go get -u ./...
它将更新所有需要的包。