是否可以禁止导入具有多个独立模块的模块(mono-repo)?

Is it possible to dis-allow import of module (mono-repo), having multiple independent modules?

我基本上拥有的是一个单存储库,它在根级别没有 go.mod。这个 mono-repo 中有多个目录,每个目录都有自己的 go.mod 文件。我将它们称为 sub-modules.

现在,我找到了一种能够在完全不同的代码库中独立(版本化)访问子模块的方法。我现在面临的问题是,要禁止导入整个 mono-repo,使用:

go get link.to/mono-repo@commit_id ------> A

并且只允许导入使用:

go get link.to/mono-repo/sub_mod1@v0.x.y

go get link.to/mono-repo/sub_mod2@v0.y.z

命令A可以获取整个repo,然后可以用来访问内部模块。有什么办法可以阻止这种行为被允许吗?

我尝试了一些方法,例如:

有什么方法可以达到我的目的吗?

任何包含自己的 go.mod 文件的目录都被排除在父目录的模块之外。所以如果你go get link.to/mono-repo@commit_id,那应该包含包link.to/mono-repo/sub_mod1link.to/mono-repo/sub_mod2(假设它们存在并且有自己的go.mod文件)。

我怀疑您正在观察像 import "link.to/mono-repo/sub_mod2/some/package/here" 这样的导入来解析不是因为最初的 go get,而是因为 go 命令正在解析丢失的导入(并添加缺少依赖项)自动;参见 https://golang.org/ref/mod#go-mod-file-updates

从 Go 1.16(今天发布!)开始,大多数 go 命令不再隐式修改 go.mod 文件,因此 repo root 中的模块不包含的内容嵌套模块应该更清晰。