Currently plugins are only supported on Linux and macOS
- 通过plugin我们可以很方便的对于不同功能加载相应的模块并调用相关的模块;
- 也可以针对不同语言(英文、汉语、德语……)加载不同的语言so文件,进行不同的输出;
- 还可以把编译出的文件给不同的编程语言用
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