https://github.com/A-Donga/PluginTest
https://www.jianshu.com/p/917b159a4be6
Golang 插件化开发
Golang官方提供了plugin模块,该模块可以支持插件开发.
目前很多思路都是在开发过程中支持插件话,当主体程序写完后,不能够临时绑定插件.但是本文将带领你进行主体程序自动识别并加载、控制插件调用.
插件装载
插件装载很简单,但是让插件运行需要们指定一个函数,所有插件都要必须实现该方法,但是如果批量后,我们无法确定插件的运行时机,因此我们会在装载后,直接运行插件,测试我们的批量装载是可行的.
首先我们需要创建一个单独处理插件的文件pluginSupport.go
$ go build –buildmode=plugin -o HelloPlugin.so HelloPlugin.go
插件进阶-传参、更加优雅的调用
这里已经偏离的插件的控制了,已经涉及到模块的控制了.
对于不通的项目,已经无法依靠小幅度修改进行适配了,因此这里仅提供几种思路,不提供具体的逻辑实现.
我们让所有插件都接受上下文作为参数,而上下文对于插件和主体程序是共享的,因此可以依靠上下文传递变量、或者更多的信息.
日志体系完全可以依靠这种方式植入,同时,插件能够控制更多的行为和数据.
我们还可以依靠上下文控制插件能够调用的方法.
我们在每一次调用方法的时候,使用包装器或者其他手段让上下文自动更新,而上下文更新的同时去调用插件,这样,我们就和插件降耦了,而且,本身上下文也可以作为参数,提供给程序主体进行调用控制,所以我们是和上下文耦合的.
但是缺点也显而易见,不论是主体应用还是插件本身的维护成本很高.
https://mp.weixin.qq.com/s/5q5eIMDHz35ycTBTkB33JQ
https://gocn.vip/topics/11072