如何防止 go mod tidy 查找替换的 module 路径

How to prevent go mod tidy from looking up a replaced module path

考虑以下设置:


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 mod tidy, try first (Go 1.16+, from issue 26603):

go mod tidy -e

The -e flag makes tidy attempt to proceed despite errors encountered while loading packages.

只需分配一个合适的版本号,如 v0.0.0,它就会工作。

Go 模块使用语义版本控制模型,不能像 dummy 那样有任意版本。 Module version numbering.

中描述了支持的版本格式

额外注意事项:避免嵌套 Go 模块。这可能会导致设置混乱以及后续工具出现问题。