转到模块会提取软件包的旧版本

时间:2019-08-30 08:04:25

标签: docker go go-modules

我正在尝试使用go模块将新包添加到我的项目中。该软件包使用github.com/docker/docker/client,在项目外部运行良好。当我运行go mod vendor时,它会拉取v1.13.1版本的docker客户端软件包,该软件包没有我在代码中使用的某些方法,但是在go模块中,它被标记为最新方法。如何让go mod使用真正最新的软件包?

5 个答案:

答案 0 :(得分:2)

这也使我发疯:下载“ master”或“ latest”标签通常会在HEAD之前下载一或两次提交的版本。我找到了答案here

go命令默认为从公共Go下载模块 位于proxy.golang.org的模块镜像。它也默认验证 下载的模块,无论来源如何,都针对公共Go 校验和数据库位于sum.golang.org。这些默认设置适用于 公开的源代码。

显然,正在进行一些缓存;如果您稍等片刻通常可以开始工作,或者可以将版本暂时设置为特定的提交。

要解决此问题,我设置了temp

答案 1 :(得分:0)

为了获取最新的未标记版本,您需要指定执行 go get

时想要的提交标记。
go get github.com/docker/docker/client@[commit-hash]

答案 2 :(得分:0)

Go Wiki: Modules:

  

在需要时,可以使用诸如go get foo@v1.2.3go get foo@mastergo get foo@e3702bed2之类的命令或直接编辑go.mod来选择更具体的依赖项版本。

如果您需要在master分支上进行最新提交,请使用

go get github.com/docker/docker/client@master

答案 3 :(得分:0)

建议使用特定版本(首选标记版本,如果不是最新的伪版本而不是主版本)。在go.mod文件中锁定依赖项版本可确保可重复性。

其中一个使用代理的最新版本是https://search.gocenter.io/github.com~2Fdocker~2Fdocker/info?version=v1.14.0-0.20190511020111-3998dffb806f

答案 4 :(得分:0)

花了最近20个小时尝试解决一个类似的问题,以我为例,以下步骤解决了该问题:

  1. 删除$GOPATH/pkg/sumdb
  2. 删除go.mod和go.sum文件
  3. 重新创建模块:进入mod init名称
  4. 去测试./...