V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
zarte
V2EX  ›  Go 编程语言

golang 程序如何实现插件功能

  •  
  •   zarte · 2019-06-27 11:00:28 +08:00 · 4294 次点击
    这是一个创建于 2005 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    10 条回复    2019-06-28 04:11:31 +08:00
    index90
        1
    index90  
       2019-06-27 11:05:02 +08:00   ❤️ 1
    你想问 Go 能不能使用动态链接库吧?据我所知貌似不能。

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

    go build -buildmode=plugin plugin.go

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

    Go 暂时没有后续支持动态链接库,最好也不要用这种方式。
    dbskcnc
        9
    dbskcnc  
       2019-06-27 11:36:56 +08:00
    Mitt
        10
    Mitt  
       2019-06-28 04:11:31 +08:00 via iPhone
    go build -buildmode=c-shared
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2659 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:22 · PVG 15:22 · LAX 23:22 · JFK 02:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.