go build一直抱怨:go.mod有v0后的模块路径

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 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.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
    不包含
    v17
    导入路径后缀。因此,Go工具似乎将整个v17主版本视为v0/v1,即使稍后的v17标记指向具有正确的
    Go.mod
    指令的提交,因此提交ID为“translation”
  • 在我的依赖项目中,在
    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中也提示了解决方案。