plugin

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



插件进阶-传参、更加优雅的调用
这里已经偏离的插件的控制了,已经涉及到模块的控制了.



对于不通的项目,已经无法依靠小幅度修改进行适配了,因此这里仅提供几种思路,不提供具体的逻辑实现.




  1. 上下文
    依靠程序上下文,我们可以做很多事情



我们让所有插件都接受上下文作为参数,而上下文对于插件和主体程序是共享的,因此可以依靠上下文传递变量、或者更多的信息.



日志体系完全可以依靠这种方式植入,同时,插件能够控制更多的行为和数据.



我们还可以依靠上下文控制插件能够调用的方法.



我们在每一次调用方法的时候,使用包装器或者其他手段让上下文自动更新,而上下文更新的同时去调用插件,这样,我们就和插件降耦了,而且,本身上下文也可以作为参数,提供给程序主体进行调用控制,所以我们是和上下文耦合的.




  1. 参数写死
    这样做的好处是,快速开发,如果我们按照方法1的方式进行开发,整个应用会变得特别臃肿:上下文、插件、流程、静态变量等众多模块将会被引入.



但是缺点也显而易见,不论是主体应用还是插件本身的维护成本很高.



https://mp.weixin.qq.com/s/5q5eIMDHz35ycTBTkB33JQ



https://gocn.vip/topics/11072


Category golang