noa*_*mtm 1 go microservices monorepo
我们最近开始使用 Go 来开发新的微服务。每个微服务都是一个 Go 模块,我们将它们作为单一存储库进行管理:
/
services/
s1/
go.mod
main.go
s2/
go.mod
main.go
Run Code Online (Sandbox Code Playgroud)
这工作正常,但现在我们需要在s1和之间共享一些代码s2- 两个服务使用的一些结构、上传到 S3 的函数等。
处理这种情况的正确方法是什么?common理想情况下,我会在存储库根目录( 的同级目录)中有一个目录,并将通用代码放在那里 - 但是 Go 在编译和 时services如何从那里获取代码?s1s2
我认为你问的实际上只是“如何构建 Go 应用程序来生成多个二进制文件? ”的变体。
\n您可以将您的go.mod目录重命名为顶级目录,以便您拥有以下布局:
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 common.go\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 services\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 s1\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 s2\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go\nRun Code Online (Sandbox Code Playgroud)\n开头是go.mod这样的:
module mymodule\nRun Code Online (Sandbox Code Playgroud)\n如果common/common.go看起来像这样:
package common\n\nfunc CommonFunction() string {\n return "This is a common function"\n}\nRun Code Online (Sandbox Code Playgroud)\n然后在 中services/s1/main.go,您可以导入该common模块:
package main\n\nimport (\n "mymodule/common"\n "fmt"\n)\n\nfunc main() {\n res := common.CommonFunction()\n fmt.Println(res)\n}\nRun Code Online (Sandbox Code Playgroud)\n您将s1像这样构建服务:
go build ./services/s1\nRun Code Online (Sandbox Code Playgroud)\n建筑s2类似:
go build ./services/s2\nRun Code Online (Sandbox Code Playgroud)\n您通常会拥有一个顶层Makefile来自动构建多个服务。
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |