@LIUHUAN
2020-04-06T10:17:17.000000Z
字数 757
阅读 1650
Blog
// Add.gopackage mainimport ("fmt")type Number struct {A, B int32}func (n *Number) String() string {return fmt.Sprintf("[%d,%d]", n.A, n.B)}func (n *Number) Add() int32 {return n.A + n.B}var Num Numberfunc Hello(s string) string {return fmt.Sprintf("hello %s,%+v,%d", s, Num, Num.Add())}func main() {}
go build --buildmode=plugin Add.go会生成Add.so的动态链接库
插件使用
// main.gopackage mainimport ("log""plugin")func main() {fname := "Add.so"p, err := plugin.Open(fname)if err != nil {log.Println(err)return}h, err := p.Lookup("Hello")if err != nil {log.Println(err)return}hf := h.(func(string) string)r := hf("liuhuan")log.Println(r)}
go run main.go Add.so 放在当前目录下或者在代码(fname)里指定目录dlopen()方法,所以plugin方式支持有目前有maxos,FreeBSD,linux等系统,不适用于Windows系统