go x/website/tour: 安装@latest会得到旧版本

puruo6ea  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(56)

从最新位置安装 tour 二进制文件的合理方法是使用 go install:

go install golang.org/x/website/tour@latest

然而,这样做目前会得到一个稍微旧一点的版本,在 x/website/tour 嵌套模块被合并到 x/website 模块之前。

$ go install golang.org/x/website/tour@latest
go: downloading golang.org/x/website v0.0.0-20210715154925-11adafea15f8
go: downloading golang.org/x/website/tour v0.0.0-20210616181959-e0d934b43647

$ go version -m $(which tour) | head -n 3
/Users/dmitshur/go/bin/tour: go1.16.6
	path	golang.org/x/website/tour
	mod	golang.org/x/website/tour	v0.0.0-20210616181959-e0d934b43647	h1:IFK+1/z6bm51XIJD3ksijCgwsZXJJxliWFiIYVEG6F8=

请注意,模块路径是 golang.org/x/website/tour,版本是一个月前的 v0.0.0-20210616181959-e0d934b43647,而不是 master 分支上的最新提交:

$ go install golang.org/x/website/tour@HEAD
$ go version -m $(which tour) | head -n 3  
/Users/dmitshur/go/bin/tour: go1.16.6
	path	golang.org/x/website/tour
	mod	golang.org/x/website	v0.0.0-20210715154925-11adafea15f8	h1:xRFLa1Fo4NnOCH0yKaPu6H36MmmA/GJEZyTEO+HOWlI=

解决方法是指定 @HEAD 或者想要的 tour 的确切版本。

bvhaajcl

bvhaajcl1#

嗯,这似乎在GOPROXY=direct模式下不会发生,所以可能是模块镜像在起作用。我稍后会再检查一下。

9bfwbjaz

9bfwbjaz2#

我理解为什么会出现这种情况,并确认go命令和模块镜像都按预期工作。具体来说,https://golang.org/ref/mod#resolve-pkg-mod 指定了以下内容:
如果一个或多个模块包含请求的包,则使用路径最长的模块。
当使用模块镜像时,可以找到x/website和x/website/tour模块的最新版本,两者都包含tour包,但选择具有较长模块路径的x/website/tour(尽管较旧)。
我怀疑我们需要发布一个更新版本的x/website/tour模块,该模块撤回其过去的版本并/或删除tour包来解决这个问题。

相关问题