pluginloader icon indicating copy to clipboard operation
pluginloader copied to clipboard

关于plugin调用

Open SchopenhauerZhang opened this issue 3 years ago • 0 comments

首先,简单看了源码是基于go plugin实现的;go plugin目前只能再main package中使用;所以具体项目中是否可以在非 main package中import "github.com/rocket049/pluginloader"待测试;

其次, go 的plugin机制是基于cgo(原理可以参考动态链接库)的.so实现,对plugin的使用是通过load plugin中的符号表(go symbols实现的,理论上每load一次plugin应用内存会增加(增加多少视plugin中符号表的大小而定);

然后,对于plugin中结构体的function、attr的使用可以理解为对普通package的调用,只能访问、修改公有属性和方法;

另外在实现抽象terface{}的各个struct的使用时必须类型断言比如B,C都实现了interface A{},但是C在plugin中,A类型传递给C时需要类型断言:A.(C);

最后,go 的plugin只支持加载不支持“卸载”。so sad!

总之,没有大家想象的灵活,并且关于对插件如何进行管理更是充满玄学气息。

SchopenhauerZhang avatar Mar 10 '21 06:03 SchopenhauerZhang