我正在尝试用 Go 创建我的第一个 monorepo。项目结构如下:
正如您在图片中看到的,monoplay
文件夹是根文件夹。
pb
文件夹包含我希望在 srv_boo/main.go
和 srv_foo/main 中使用的生成的
文件。gRPC 代码
。转到
问题是,如何使用 srv_boo/main.go
和 srv_foo 中的
文件?
文件夹结构是否正确?pb
文件夹生成的 gRPC 代码
/main.go
还想单独部署服务。
也许是 https://bazel.build/解决方案?
最佳答案
将整个存储库作为一个 go 模块将有助于解决此问题,即“Monoplay”根文件夹中只有一个 go.mod 文件。
然后服务可以使用“github.com/*/monoplay/pb/*”导入引用生成的 go 文件。
这也将集中整个存储库的依赖管理,因为只有一个 go.mod 文件(如果您需要的话)。
其他替代方案:
使用“go mod edit”:
https://go.dev/ref/mod#go-mod-edit
或者,正如 DazWilkin 建议的那样,在原始文件中将“go_package”与“go-grpc_opt”和“go_opt”一起使用。
我使用单模块方法并推荐它。
如果存储库将包含大量代码并且构建所有内容(包括容器镜像)很麻烦并且需要很长时间,那么请查看 bazel。
关于go - Monorepo : How to consume a package from another project?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70778253/