解读golang plugin热更新尝试

2020-01-28 13:11:32王冬梅

到这里,我们的热更新效果已经达成,但是还是有一些限制

1、每个so不能单独保存数据,因为当另一个so加载后,前面so的数据是没办法访问到,并且由于so不能被关闭,可能会出现多个so引用同一个变量,gc没办法释放,所以需要透过容器来共享数据,那么我们就不能在模块内使用全局变量来保存数据。

2、go里面两个类型即使一样,也不能直接转换,所以两个so内定义的结构体也不能直接转换,要使用unsafe.Pointer来进行强转(见src/logic/main.go),既然是强转,那么两个版本的so使用的结构体定义就不能有区别,否则转换后数据可能会出现异常,也就是说热更新不能修改结构体。

 本文只是技术尝试,没有线上验证,还有多少坑还不知道,热更新不是必须,如若支持,便是好事。。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。