最近在帮朋友做毕设的一部分,主要需求是:可拔插的程序进行服务器的重启部署等等
最初思路是:一个服务器用作配置进行编译.so 文件
其他子服务器调用此服务器上的配置好的.so 服务
编译部分:
_, err := exec.Command("go", "build", "-buildmode=plugin", "-o", "plugin/"+serviceName+".so",
"plugin/"+serviceName+".go").Output()
编译完成后:写入消息进入消息队列
调用阶段:
type Common interface {
Service([]byte) []byte
}
open, err := plugin.Open($addr+ $serviceName + ".so")
if err != nil {
fmt.Println("打开插件错误:", err)
return nil
}
symbol, err := open.Lookup(serviceName)
if err != nil {
fmt.Println("服务未发现:", err)
return nil
}
if srv, ok := symbol.(Common); ok {
return srv.Service(data)
}
return nil
是的,调用的时候报错了 not implement 不能远程通过网络链接调用,换了一种方式下载到了本地,然后再调用,可以使用,但是本地服务器和远端服务器系统环境必须一样,否则不能执行。 后来摒弃了动态链接拔插的这种方式了。接触不多且打开方式不正确,就放弃了
源码中的例子
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于