【问题标题】:How to prevent go mod tidy from looking up a replaced module path如何防止 go mod tidy 查找替换的模块路径
【发布时间】:2022-01-01 20:56:10
【问题描述】:

考虑以下设置:


go.mod

module example.com/main

require example.com/sub dummy
replace example.com/sub => ./sub

sub/go.mod

module example.com/sub

如果我在主目录中运行go mod tidy,它会发出

go: errors parsing go.mod:
[…]/go.mod:3: unrecognized import path "example.com/sub": reading https://example.com/sub?go-get=1: 404 Not Found

即使 URL 存在,我的理解是由于 replace 指令,go mod 与原始来源没有任何业务,因为我替换了它。那么它为什么要查询源呢?我该如何预防呢?

我已经尝试设置 GOPROXY=off 导致

[…]/go.mod:3: module lookup disabled by GOPROXY=off

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    只需分配一个正确的版本号,例如v0.0.0,它就会起作用。

    Go 模块使用语义版本控制模型,不能有像 dummy 这样的任意版本。支持的版本格式在Module version numbering中描述。


    注意事项:避免嵌套 Go 模块。这可能会导致混乱的设置和后续工具的问题。

    【讨论】:

    • 啊,是的,我记得读到 go mod 会尝试替换非规范版本,但我认为这不会优先于 replace。此修复有效,谢谢!顺便说一句,模块只是为了演示而嵌套在这里,实际的替换路径进入 nix 商店。
    【解决方案2】:

    go mod tidy,先试试(Go 1.16+,来自issue 26603):

    git mod tidy -e
    

    -e 标志使tidy 尝试继续,尽管在加载包时遇到错误。

    【讨论】:

    • go1.16.12 上执行此操作会产生相同的错误,但仍然不会写入go.sum(这就是我运行go mod tidy 的原因)并且还有一个非零退出代码。
    • @flyx go 1.17.5 或 1.18 beta 1 会持续吗?
    • go1.17.5 给出同样的错误,我无法快速访问 1.18。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多