【发布时间】:2021-09-01 13:15:12
【问题描述】:
我正在尝试从 GOPATH 切换到 Go 模块。我有许多可执行文件使用的本地模块,出于安全原因,我无法将它们联机。
当模块“d”依赖三个包:“a”、“b”、“c”时,我需要在go.mod中“替换”:
replace m.y/a => /my/a
replace m.y/b => /my/b
replace m.y/c => /my/c
可执行文件导入包“d”时,并不直接导入a/b/c,但还是需要go.mod中的“replace a,b,c”:
replace m.y/a => /my/a
replace m.y/b => /my/b
replace m.y/c => /my/c
replace m.y/d => /my/d
这是设计使然还是我用错了?既然 a/b/c 已经在 d 的 go.mod 中了,为什么我必须为每个使用 d 的可执行文件重新编写它们?
go 模块是否支持从另一个 go.mod 导入?或者是否可以一次又一次地不写“替换a/b/c”?
【问题讨论】:
-
如果不将替换放在导入“d”的模块中会发生什么?
-
它是by design that only the main package can process
replacedirectives。如果您的模块依赖项本身需要本地替换才能运行,它们就会被破坏。 -
@HymnsForDisco 如果删除可执行文件的 go.mod 中的“replace a/b/c”,则运行失败,例如“go: d requires a...”,它将尝试获取它们通过http获取请求,失败。
-
我还建议仔细研究这些是否真的应该是四个独立的模块。
标签: go go-modules