是否有可能利用基于在 Go 平台的应用服务器上运行的模块化组件的设计?
是否存在使 Go 无法实现此设计的限制?
没有什么类似于 Java 或 .NET 中可用的应用程序服务器但是有支持 Go 的 google AppEngine
没有办法像 Java 或 .NET 那样在 Go 中加载/卸载代码
您不能将 go 编译为将与另一个 Go 应用程序一起加载的库。
无论如何,您可以使用 Go 创建应用程序服务器。它将有多个进程并通过启动/停止进程来加载/卸载代码。
它还可以通过在模块中嵌入一些特定于服务器的代码来编译服务器上的代码。例如,这样的额外代码可以实现 AppServer 进程间通信。
为此,XATMI 服务理念完美契合,将单独的可执行二进制文件作为无状态服务。应用服务器通过中间件管理它们的 IPC 通信,管理进程状态(保持所有进程正常运行),提供进程重新加载工具等。例如,我可以提到 Enduro/X ASG 项目(https://github.com/ endurox-dev/endurox-go),它完成所有这些任务。它还提供分布式事务处理框架。
据我了解,Go 的主要特点之一是它既不需要应用服务器,也不需要在运行时添加/加载代码。Go 已编译并(几乎)静态链接,可执行文件已准备好运行。
虽然所有这些模块在运行时看起来都很方便,但它有很多缺点,尤其是增加了部署和依赖的复杂性。
我怀疑 Go 社区是否会将模块系统视为“杠杆”。