在 monorepo 环境中发布 go 模块

Kin*_*arō 8 go go-modules

假设我有一个 monorepo 并且有几个单独的 golang 服务:

\n
root    \n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 services\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 svc1\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n        \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 svc2\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.sum\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\n
Run Code Online (Sandbox Code Playgroud)\n

而 svc2 将来将依赖于 svc1。另外,要求svc1和svc2可以单独释放。

\n

有没有办法可以单独发布模块?go mod 文档仅假设只有 repo,因此它不提供这样的灵活性。

\n

bcm*_*lls 16

要标记存储库子目录中模块的发布版本,请添加子目录作为标记的前缀,例如svc1/v0.1.0.

\n

根据https://golang.org/ref/mod#vcs-version

\n
\n

如果模块是在存储库 \xe2\x80\xa6 内的子目录中定义的,则每个标记名称必须以模块子目录作为前缀,后跟斜杠。例如,模块golang.org/x/tools/gopls定义在gopls存储库的子目录中,根路径为golang.org/x/tools。该模块的版本必须具有该存储库中v0.4.0命名的标签。gopls/v0.4.0

\n
\n