Go 1.8 提供了一个创建共享库的新工具:Plugins!只能在 Linux 和 MacOS 下使用。其可以应用如下场景:

  • 通过plugin我们可以很方便的对于不同功能加载相应的模块并调用相关的模块;
  • 也可以针对不同语言(英文、汉语、德语……)加载不同的语言so文件,进行不同的输出;
  • 还可以把编译出的文件给不同的编程语言用(如:c/java/python/lua等)。

以下记录一个Golang调用 .so 文件实现动态化编程的小例子:

首先创建一个 go文件 aplugin.go:

    package mainfunc Add(x, y int) int {return x+y}func Subtract(x, y int) int {return x-y}

接下来生成 so 文件:

go build -buildmode=plugin -o aplugin.so aplugin.go

到此就得到了 so 文件,可以进行函数的调用测试了。

新建一个 main.go 文件:

package mainimport ("fmt""plugin"
)func main() {ptr, err := plugin.Open("aplugin.so")if err != nil {fmt.Println(err)}Add, _ := ptr.Lookup("Add")sum := Add.(func(int, int) int)(5, 4)fmt.Println("Add结果:", sum)Sub,_ := ptr.Lookup("Subtract")sub := Sub.(func(int,int)int)(9,8)fmt.Println("Sub结果:",sub)
}

结果如下:

总结:“plugin”包可导出(首字母大写)函数和变量的main包,一个plugin只会被初始化一次,并且不会被关闭。plugin的操作都是协程安全的。plugin 需要先调用 Open( ) 方法打开 so 文件,再调用 Lookup 方法进行函数和变量的调用。

GoLang 调用 .so 文件相关推荐

  1. golang调用c文件

    c语言的头文件foo.h int count; void foo(); c语言的实现文件foo.c #include <stdio.h> #include "foo.h" ...

  2. Golang 调用http 文件上传接口 进行上传文件

    远程服务器有一个文件上传接口,文件用于保存到服务器本地,用go如何调用此接口将文件上传至服务器? 首先,文件上传请求方 与 接收方 要协调工作(解析等工作) 接收方: func UploadFileT ...

  3. golang 调用 c 动态库so 静态库a

    目录 Golang中嵌入C代码 Golang中调用C的动态库so Golang调用C的静态库a Golang与C的关系非常密切,下面主要介绍在Golang中使用C. Golang中嵌入C代码 pack ...

  4. golang生成c-shared so供c语言或者golang调用到例子

    1.golang生成c-shared类型到so 建立文件夹hello,创建main.go文件,内容如下 package mainimport "C"func main() {}// ...

  5. golang 调用chatGPT

    golang 调用chatGPT 1. Preparation 2. chatGPT in golang 3. 仓库链接 4. Chat Log 1. Preparation 申请openAI的Key ...

  6. thinkphp 调用php文件上传,ThinkPHP实现带验证码的文件上传功能实例

    本文实例讲述了ThinkPHP实现带验证码的文件上传功能.分享给大家供大家参考.具体实现方法如下: ThinkPHP上传文件非常的简单我们只要调用一个文件上传类UploadFile就可以快速的实现上传 ...

  7. python调用js库中的函数_Python 调用JS文件中的函数

    Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...

  8. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  9. 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。

    关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...

最新文章

  1. 正则表达式基本语法详解
  2. 域名解析跳转到另一个域名_github建立静态网站,域名解析和跳转
  3. Vue.js(17)之 插槽
  4. 【WebRTC---入门篇】(六)JavaScript基础
  5. sqlite3_exec
  6. linux怎样写java代码,linux 怎么写java
  7. python如何做接口测试_python实现接口测试
  8. 使用差分金字塔提取图像边缘 python实现
  9. Hibernate的单向1-1关联(二)
  10. ubuntu16.04安装monaco字体
  11. java项目之人事管理系统|HRM(java毕业设计Struts2、mybatis框架项目
  12. Java串口通信(RXTX)
  13. 车辆方向盘转角传动比标定方法
  14. PHP——AES加解密 +SIGN校验唯一性安全性(Api)
  15. 创建用户要给session权限,报错:user lacks CREATE SESSION privilege
  16. 漫天杂想系列之五:2018年总结
  17. vim配置set nu
  18. 树莓派智能家居项目整合(包含语音、socket、火灾、摄像头线程)
  19. Oracle数据库违反唯一约束条件
  20. 使用Arduino Tone()函数演奏旋律

热门文章

  1. 【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
  2. 这个教人怎么赚钱的社群,第7年了
  3. 乐视视频”剧“好看 2016海量剧集精彩来袭
  4. “舒适区”的科学原理:为什么走出舒适区这么难?
  5. 学红外雨量IFR202型传感器应用于智慧灌溉自动门窗地质灾害
  6. ViGEM 车载高速数据记录仪 自动驾驶/信息娱乐测试
  7. Eric6与pyqt5学习笔记 6【实战2 window伪文本编辑器】【纯eric6操作】
  8. 多媒体 MP4文件格式详解——文件类型ftyp
  9. mysql使用 union all查询统计总数量
  10. CAS使用账号密码实现单点登陆