首页 > 解决方案 > 在 monorepo 环境中发布 go 模块

问题描述

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

root    
└── services
        ├── svc1
        │   ├── go.mod
        │   ├── go.sum
        │   └── main.go
        └── svc2
            ├── go.mod
            ├── go.sum
            └── main.go

而 svc2 将来会依赖于 svc1。此外,要求 svc1 和 svc2 可以单独发布。

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

标签: gogo-modules

解决方案


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

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

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


推荐阅读