golang 程序如何实现插件功能

2019-06-27 11:00:28 +08:00
 zarte

场景如下:
已经编译好主程序。main.exe. 解析不同文件的。
后来有了新格式文件,编写了新的解析插件:plug1.exe.main.exe 根据获取的参数调用 plug1.exe 解析。

上面这样是目前想到的,有常规合理的解决办法吗?

4169 次点击
所在节点    Go 编程语言
10 条回复
index90
2019-06-27 11:05:02 +08:00
你想问 Go 能不能使用动态链接库吧?据我所知貌似不能。

但应该有办法,例如 plug1.exe 实现 unix socket 接口,然后 main.exe 去调。
z0ne
2019-06-27 11:10:16 +08:00
Go 是可以编译和调用链接库的 动态 /静态
但是只能在 unix 系上用,比如 linux 和 macOS,可以编译成.so 文件,不能编译成 dll

go build -buildmode=plugin plugin.go

具体代码可以搜索,很多参考资料
zarte
2019-06-27 11:10:57 +08:00
@z0ne 谢谢
misaka19000
2019-06-27 11:12:28 +08:00
提供一个思路,用 lua 来实现解析的操作
zarte
2019-06-27 11:15:01 +08:00
@z0ne 以后有没有可能支持 dll ?
zarte
2019-06-27 11:15:30 +08:00
@misaka19000 那样又多了一个技术栈了
zarte
2019-06-27 11:17:05 +08:00
@misaka19000 不过比我想的方法好点
janxin
2019-06-27 11:33:02 +08:00
hashicorp/go-plugin 可以看一下

Go 暂时没有后续支持动态链接库,最好也不要用这种方式。
dbskcnc
2019-06-27 11:36:56 +08:00
Mitt
2019-06-28 04:11:31 +08:00
go build -buildmode=c-shared

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/577914

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX