golang 插件编写

目录

golang 1.8 后支持 plugin,现在使用 plugin 的一个主要用处就是用于商业软件,不公开源码的情况下给把程序以 plugin 的方式,让其他人使用。

编写插件代码

package main

func Add(x, y string) string {
  return x + y + "haha"
}

编译插件

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

使用插件

  可惜经过我的测试 plugin 不支持热更新,这也就意味着,如果 plugin 修改了,也必须重启服务。
package main

import (
  "fmt"
  "log"
  "net/http"
  "plugin"
)

func handler(w http.ResponseWriter, r *http.Request) {
  vars := r.URL.Query()
  a := vars["a"][0]
  b := vars["b"][0]
  p, _ := plugin.Open("./add.so")
  add, _ := p.Lookup("Add")
  sum := add.(func(string, string) string)(a, b)

  fmt.Println(sum)
  fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
  http.HandleFunc("/", handler)
  log.Fatal(http.ListenAndServe(":8080", nil))
}

目录