Concepts
不重启主进程,可动态加载运行的子模块或代码块。
实现对网元等模块实现插件式的动态数据转换,编辑数据转换逻辑不再需要更新、重启服务端代码。
方案
动态加载
无需编译
原生支持
交互难度
集成难度
plugin
✅
✅
原生接口
一般
hashicorp/plugin
✅
GRPC
高
wasm
✅
手动操作内存
一般
lua
✅
✅
可共享 struct
低
javascript
✅
✅
JSON
低
Plugin
https://pkg.go.dev/plugin
Pros & Const
优点:
Go 代码,没有学习成本
原生支持
缺点:
需要编译,集成的时候需要多写点代码
发布时需要多集成一个 Go 可执行文件,会多 100 MB 左右
Usage
Golang 实现动态加载:
首先写个 package main,里面定义任何公开函数
go build -buildmode=plugin 打包成 so 文件
主程序里通过 plugin.Open 加载这个 so 文件