【问题标题】:go build keeps complaining that: go.mod has post-v0 module pathgo build 一直在抱怨:go.mod 有 post-v0 模块路径
【发布时间】:2019-02-02 15:09:12
【问题描述】:

随着 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()
}

并尝试编译它,我得到以下错误:

go:my.host/root@v0.0.0-20180828034419-6bc78016491a:go.mod 在修订版 6bc78016491a 中具有 post-v0 模块路径“my.host/root/v17”

我不知道为什么会发生这种情况。我在go.mod 文件中明确添加了v17.0.1,但每次尝试go build 都会用v0.0.0-20180828034419-6bc78016491a 版本替换该条目,然后该版本失败,因为在该提交时,我的根库的go.mod 文件module 条目确实以v17 结尾,应该如此。

为了记录,这个提交与标记的v17.0.1版本相同。

我在这里做错了什么?我该如何调试这种情况?

【问题讨论】:

  • A 不要认为模块名称应该包含 v17(只有 import 语句会),
  • @Volker 我对此不确定:The go modules documentation 说:“更新 go.mod 文件以在模块路径的末尾包含 /v2。使用 v2.0.0 标记发布。 "
  • 你是对的,看来我错了。
  • 该错误消息抱怨导入语句或require(或类似的)缺少模块名称中的/v17。请参阅此answer 以获得更长的解释,包括更多关于 v2+ 模块需要 /vN 的位置,以及指向知道如何自动更新所有需要更新的内容的社区工具(如果您是v2+ 模块的使用者或作者。

标签: go go-modules


【解决方案1】:

我犯了两个错误:

  • 我最初的v17.0.0 标记将指向go.mod 不包含v17 导入路径后缀的提交。结果,似乎 Go 工具将整个 v17 主要版本视为 v0/v1,即使以后的 v17 标记指向具有正确 go.mod 指令的提交,因此提交 ID "翻译”。
  • 在我的依赖项目中,在go.mod 文件中,我错误地指定了
    require my.host/root v17.0.1 而不是
    require my.host/root/v17 v17.0.1

解决这两个问题后,一切似乎恢复正常,并且运行良好。我希望文档对此更清楚,但我想这是做出贡献的好机会!

【讨论】:

  • 要添加到上述答案,Go repo wiki 中的this section 也提示了解决方案。
【解决方案2】:

我得到的错误是:github.com/emicklei/go-restful@v0.0.0-20180531035034-3658237ded10: go.mod has post-v0 module path "github.com/emicklei/go-restful/v2" at revision 3658237ded10

在我的go.mod 文件中附加github.com/emicklei/go-restfulv2 像这样:github.com/emicklei/go-restful/v2 为我修复了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2014-09-20
    • 2021-08-18
    • 2021-01-16
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多