这个项目需要用到动态链接库技术, 主程序动态加载一些功能模块,这样在扩充功能时,无须修改主程序,只需要新增功能模块动态调用就可以了。 研究了一下golang官方支持的plugin功能,发现有几点不足。 

     1.官方plugin功能本质上是用cgo实现的,编译一个so文件,然后再调用

     2. 只支持linux, 不支持windows

     3.  plugin模块panic时, 主程序也会panic, 无法做到隔离。

   基于上述原因,我开始另外寻找合适的第三方支持。后来发现这样一个开源库,https://github.com/hashicorp/go-plugin , 感觉符合我的需求。它基于net/rpc ,grpc实现,主程序和plugin程序是两个qtj独立进程,可以通过主程序调用plugin进程启动,也可以附加进程的方式。通过本地网络通讯,达到类似动态链接库调用的效果。 

官方示例如下:

plugin:  

  主程序 (调用方):