GoLang 调用 .so 文件
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 文件相关推荐
- golang调用c文件
c语言的头文件foo.h int count; void foo(); c语言的实现文件foo.c #include <stdio.h> #include "foo.h" ...
- Golang 调用http 文件上传接口 进行上传文件
远程服务器有一个文件上传接口,文件用于保存到服务器本地,用go如何调用此接口将文件上传至服务器? 首先,文件上传请求方 与 接收方 要协调工作(解析等工作) 接收方: func UploadFileT ...
- golang 调用 c 动态库so 静态库a
目录 Golang中嵌入C代码 Golang中调用C的动态库so Golang调用C的静态库a Golang与C的关系非常密切,下面主要介绍在Golang中使用C. Golang中嵌入C代码 pack ...
- golang生成c-shared so供c语言或者golang调用到例子
1.golang生成c-shared类型到so 建立文件夹hello,创建main.go文件,内容如下 package mainimport "C"func main() {}// ...
- golang 调用chatGPT
golang 调用chatGPT 1. Preparation 2. chatGPT in golang 3. 仓库链接 4. Chat Log 1. Preparation 申请openAI的Key ...
- thinkphp 调用php文件上传,ThinkPHP实现带验证码的文件上传功能实例
本文实例讲述了ThinkPHP实现带验证码的文件上传功能.分享给大家供大家参考.具体实现方法如下: ThinkPHP上传文件非常的简单我们只要调用一个文件上传类UploadFile就可以快速的实现上传 ...
- python调用js库中的函数_Python 调用JS文件中的函数
Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...
- Hadoop集群上使用JNI,调用资源文件
hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...
- 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。
关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...
最新文章
- 正则表达式基本语法详解
- 域名解析跳转到另一个域名_github建立静态网站,域名解析和跳转
- Vue.js(17)之 插槽
- 【WebRTC---入门篇】(六)JavaScript基础
- sqlite3_exec
- linux怎样写java代码,linux 怎么写java
- python如何做接口测试_python实现接口测试
- 使用差分金字塔提取图像边缘 python实现
- Hibernate的单向1-1关联(二)
- ubuntu16.04安装monaco字体
- java项目之人事管理系统|HRM(java毕业设计Struts2、mybatis框架项目
- Java串口通信(RXTX)
- 车辆方向盘转角传动比标定方法
- PHP——AES加解密 +SIGN校验唯一性安全性(Api)
- 创建用户要给session权限,报错:user lacks CREATE SESSION privilege
- 漫天杂想系列之五:2018年总结
- vim配置set nu
- 树莓派智能家居项目整合(包含语音、socket、火灾、摄像头线程)
- Oracle数据库违反唯一约束条件
- 使用Arduino Tone()函数演奏旋律
热门文章
- 【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
- 这个教人怎么赚钱的社群,第7年了
- 乐视视频”剧“好看 2016海量剧集精彩来袭
- “舒适区”的科学原理:为什么走出舒适区这么难?
- 学红外雨量IFR202型传感器应用于智慧灌溉自动门窗地质灾害
- ViGEM 车载高速数据记录仪 自动驾驶/信息娱乐测试
- Eric6与pyqt5学习笔记 6【实战2 window伪文本编辑器】【纯eric6操作】
- 多媒体 MP4文件格式详解——文件类型ftyp
- mysql使用 union all查询统计总数量
- CAS使用账号密码实现单点登陆