golang 1.8 及以上版本提供了一个创建共享库(shared object)的新工具,称为 Plugins。目前 Plugins 仅在 Linux、FreeBSD 和 macOS 上受支持,且只支持 golang 调用。
使用示例,定义一个 plugin.go :
package main
import ( "log" )
func init() { log.Println("plugin init") }
type SayHello struct { }
func (s *SayHello) CallMe(name string) string { log.Println("hello ", name) return "I am plugin" }
var SayHelloPlugin SayHello
使用 -buildmode=plugin 模式编译出 plugin.so 共享库
go build -o plugin.so -buildmode=plugin plugin.go
main.go 中调用插件:
package main
import ( "log" "plugin" )
type CustomPlugin interface { CallMe(name string) string }
func main() { p, err := plugin.Open("plugin.so") if err != nil { panic(err) } sayHelloPlugin, err := p.Lookup("SayHelloPlugin") if err != nil { panic(err) } if sayHello, ok := sayHelloPlugin.(CustomPlugin); ok { log.Println(sayHello.CallMe("togettoyou")) } }
go run main.go
2021/07/28 17:07:21 plugin init 2021/07/28 17:07:21 hello togettoyou 2021/07/28 17:07:21 I am plugin
定义一个插件总结:
|
请发表评论