本次分享内容是go-plugin。
github:https://github.com/manfredchester/plugin-card-application
go-plugin是什么
plugin插件是包含可导出可访问的function和变量的,且是由main package编译之后的文件。注意这里main并不是业务服务中的main包而是plugin中有属于自己独立的main package。
plugin插件使我们可以使用动态加载链接库构建松散耦合的模块化的程序,可以在运行时动态加载和绑定。
官方文档:https://golang.google.cn/pkg/plugin/#pkg-overview
go-plugin生命周期
plugin插件被打开plugin.Open(*.so),插件的init()才被执行。
插件只被初始化一次,不能被关闭。
- main.go的init函数执行
- 开始执行main.go main函数
- 开始执行plugin.Open(“xxx.so”)打开插件
- 插件开始执行内部的init函数
go-plugin应用场景
- 通过plugin我们可以很方便的对于不同功能加载相应的模块并调用相关的模块
- 针对不同语言(英文,汉语,德语……)加载不同的语言so文件,进行不同的输出
- 编译