繁体   English   中英

将用 Go 编写的微服务合并到一个二进制文件中

[英]Merge micro-services written in Go into one binary

我的应用程序由几个 golang 编写的程序组成,这些程序在 docker/k8s 微服务架构中运行。 现在,我们希望它在没有 docker/k8s 的情况下直接在 Linux 上运行。 所以我们正在考虑将所有程序合并为一个二进制程序。 由于每个程序都是在 cmd/main.go、internal/{aaa,bbb,ccc}/xxx.go 中组织的,哪种方式最好? 谢谢!

现在能想到的就是把pkg/.../xxx.go中的各个服务重新组织起来,包括main.go中所有当前的代码。 然后我的 all-in-one.go 将导入所有 main.go 代码。

有什么建议么?

由于每个程序都是在 cmd/main.go、internal/{aaa,bbb,ccc}/xxx.go 中组织的,哪种方式最好?

你必须重新组织它们。 大多数不是小型/一次性的 Go 项目都遵循以下某些版本:

  • 每个可构建命令的cmd/commandname下的一个或多个main包,内部代码很少:通常只是一个main()入口点函数,除了调用来自其他包的代码外什么都不做。
  • cmd之外的其他包中的所有模型和应用程序逻辑,可以根据需要由多个命令(或其他项目)共享,并且可以轻松地进行单元测试。

也就是说,我建议仔细研究合并这些服务是否真的有必要或有帮助,而不是仅仅按原样并排运行服务。 即便如此,听起来重组项目无论哪种方式都是有益的。

我认为最好的方法是开始一个新项目并将代码复制/粘贴到新函数和包中。 如果您有多个具有相同名称 (func main()) 或相同文件名 (main.go) 的函数,您的代码将无法编译。

我将从一个全新的 main.go 开始,并开始在子文件夹 fe project1/project1.go 中实现代码

可以导入包,然后通过import yourpackageurl.com/project1导入 main.go

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM