go build一直抱怨:go.mod有v0后的模块路径
Go 1.11发布后,我一直在尝试将我的存储库移动到Go模块,方法是在它们的根目录下添加一个go build一直抱怨:go.mod有v0后的模块路径,go,go-modules,Go,Go Modules,Go 1.11发布后,我一直在尝试将我的存储库移动到Go模块,方法是在它们的根目录下添加一个Go.mod文件 我的一个根库my.host/root在其版本17.0.1中,因此我在其go.mod文件中写道: module my.host/root/v17 我标记了Go模块手册中记录的版本v17.0.1 当我尝试创建一个使用我的根库的新Go项目时,如: package main import root "my.host/root/v17" func main() { root.DoSo
Go.mod
文件
我的一个根库my.host/root
在其版本17.0.1中,因此我在其go.mod
文件中写道:
module my.host/root/v17
我标记了Go模块手册中记录的版本v17.0.1
当我尝试创建一个使用我的根库的新Go项目时,如:
package main
import root "my.host/root/v17"
func main() {
root.DoSomething()
}
并尝试编译它,我得到以下错误:
围棋:我的主人/root@v0.0.0-20180828034419-6bc78016491a:go.mod在版本6bc78016491a中具有v0后模块路径“my.host/root/v17”
我不知道为什么会发生这种情况。我在go.mod
文件中明确添加了v17.0.1
,但是每次尝试go build
时都会用v0.0.0-20180828034419-6bc78016491a
版本替换条目,该版本随后失败,因为在提交时,我的根库的go.mod
文件模块
条目实际上以v17
结束,应该如此
对于记录,此提交与标记的v17.0.1
版本相同
我做错了什么?如何调试这种情况?我犯了两个错误:
- 我最初的
标记将指向提交,其中v17.0.0
不包含go.mod
导入路径后缀。因此,Go工具似乎将整个v17主版本视为v0/v1,即使稍后的v17标记指向具有正确的v17
指令的提交,因此提交ID为“translation”Go.mod
- 在我的依赖项目中,在
文件中,我错误地指定了go.mod
需要my.host/root v17.0.1而不是
需要my.host/root/v17 v17.0.1
在解决了这两个问题之后,一切似乎都恢复了正常,并且工作得非常完美。我希望文档能更清楚地说明这一点,但我想这是一个做出贡献的好机会 我得到的错误是:
github.com/emicklei/go-restful@v0.0.0-20180531035034-3658237ded10:go.mod在版本3658237ded10中具有v0后模块路径“github.com/emicklei/go restful/v2”
用v2
添加github.com/emicklei/go restful
,就像这样:github.com/emicklei/go restful/v2
在我的go.mod
文件中为我修复了它。A不认为模块名应该包含v17(只有导入语句才包含),@Volker我对此不确定:说:“更新go.mod文件以在模块路径的末尾包含/v2。用v2.0.0标记该版本。“你是对的,似乎我错了。该错误消息正在抱怨导入语句或require
(或类似内容)模块名称中缺少/v17
。有关详细说明,请参阅此部分,包括有关v2+模块需要/vN
的更多信息,以及指向社区工具的指针,该工具知道如果您是v2+模块的消费者或作者,如何自动更新所有需要更新的内容。添加到above答案,在Go repo wiki中也提示了解决方案。