golang plugin模块的使用

本文介绍了Golang的plugin模块在Linux和macOS上的使用方法,包括如何构建插件以及实例应用,如按需加载功能模块和语言处理。通过`go build -buildmode=plugin -o aplugin.so aplugin.go`命令可以创建插件文件,适用于跨语言交互和动态功能扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

共享库工具

Currently plugins are only supported on Linux and macOS

  1. 通过plugin我们可以很方便的对于不同功能加载相应的模块并调用相关的模块;
  2. 也可以针对不同语言(英文、汉语、德语……)加载不同的语言so文件,进行不同的输出;
  3. 还可以把编译出的文件给不同的编程语言用

go plugin的使用方法

使用加载plugin基本流程

加载编译好的插件 plugin.Open("./plugin_doctor.so") (*.so文件路径相对与可执行文件的路径,可以是绝对路径)
寻找插件可到变量 plug.Lookup("Doctor"),
TypeAssert: Symbol(interface{}) 转换成API的接口类型
执行API interface的方法

e.g

实验记录

[kou@python plugin]$ ls
aplugin.go  aplugin.so  test.go
[kou@python plugin]$ pwd
/home/kou/go/src/plugin
[kou@python plugin]$ cat aplugin.go 
package main
func Add(x, y int) int {
        return x+y
        
}
func Subtract(x, y int) int {
        return x-y
}
[kou@python plugin]$ cat test.go 
package main

import (
    "fmt"
    "plugin"
)


func main(){
    p, _ := plugin.Open("./aplugin.so")
    add, _ := p.Lookup("Add")
    sub, _ := p.Lookup("Subtract")
    sum := add.(func(int, int)int )(11, 2)
    fmt.Println(sum)
    subt := sub.(func(int, int)int )(22,1)
    fmt.Println(subt)

}

结果

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

[kou@python plugin]$ go run test.go 
13
21

参考文献

http://www.361way.com/go-plugin/5925.html
https://mojotv.cn/go/golang-plugin-tutorial

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值