go - 避免为本地模块的递归依赖写入 "replace"

标签 go go-modules

我正在尝试从 GOPATH 切换到 Go Module。我有许多本地模块被许多可执行文件使用,出于安全原因我无法将它们放在网上。

当模块“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”吗?

最佳答案

replace 不应用于修复源代码。它用于修复您的构建配置,通常是暂时的或仅用于开发环境。

如果您的包的导入字符串已永久更改,您需要更新导入它们的源代码。这是您希望避免重命名包或模块的原因之一。

关于go - 避免为本地模块的递归依赖写入 "replace",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68007393/

相关文章:

linux - 从标准输入读取大量数据

go - 如何使用 zap.logger 简单地从 stdout 读取(并且无需创建文件)

amazon-web-services - AWS SES 错误 : x509: certificate signed by unknown authority

amazon-web-services - 如何将带有模块的 Go 应用程序部署到 AWS EB

git - 获取私有(private)包裹时无法读取用户名

go - 在webrtc.PeerConnection中找不到OnNegotiationNeeded事件(pion golang)。但是在官方文档中它表明它在那里

go - 预加载功能在gorm中有什么作用?

git - 如何使 Go 模块语义导入版本控制 v2+ 与虚导入路径一起工作

带有私有(private) gitlab (ssh) 的 Goland 模块

继续使用 forked github repo 得到 "unexpected module path"错误