go plugin go语言的共享库 - Go语言中文社区

go plugin go语言的共享库


go plugin go语言的共享库
1) 假如你的go代码,不想每次都重新编译,那么就可以把一些模块编译成为
一个plugin,其实plugin编译出来就是.so拉,而且这个so还可以被c语言
​ 调用,因为他的api用强大的cgo实现的,当然c也可以自己dlopen啦,
不过参数类型要自己转换,给c的还是老实的用c-shared吧。
在这里插入图片描述

2) 翻阅go源码在srcplugin发现他的api,只提供了两个api,Open和Lookup
​ Open相当于我们的dlopen,Lookup相当于dlsym啦,一个打开共享库
​ 一个查找共享库符号(函数)
在这里插入图片描述

  1. 编译fooso.go
    ​ go build -buildmode=plugin fooso.go
    package main


    func Foo(str string) {
    print(str)
    }
  2. 编译say.go, 运行say 完美出现Notepad++7.5.6, ok到这里啦休息休息_
    ​ go build say.go
    在这里插入图片描述
    package main

    import (
    . “plugin”
    )

    func main() {
    handle,_ := Open(“fooso.so”)
    fnFoo,_ := handle.Lookup(“Foo”)
    fnFoo.(func(string))(“Notepad++7.5.6”)
    }
    结束语
    ​ 简洁是智慧的灵魂,冗长是肤浅的藻饰 ------莎士比亚
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43202054/article/details/88189668
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 19:49:00
  • 阅读 ( 2222 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢