共享库工具

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