golang plugin framework for hot update, go version >= 1.8
- get hotplugin
go get github.com/letiantech/hotplugin
- write a plugin with Load, Unload and other functions like this
//testplugin.go package main import ( "fmt" "log" ) const ( pluginName = "testplugin" pluginVersion = 0x00010000 ) func Load(register func(name string, version uint64) error) error { err := register(pluginName, pluginVersion) if err != nil { log.Println(err.Error()) return err } log.Println("loading test plugin") return nil } func Unload() error { fmt.Printf("unload %s, version: 0x%x\n", pluginName, pluginVersion) return nil } func Test(data string) string { return "hello " + data }
- build your plugin
go build -buildmode=plugin ./testplugin.go
-
save your testplugin.so to /path/of/plugin/dir
-
write main.go like this
//main.go package main import ( "fmt" "github.com/letiantech/hotplugin" ) func main() { options := hotplugin.ManagerOptions{ Dir: "./", Suffix: ".so", } hotplugin.StartManager(options) result := hotplugin.Call("testplugin", "Test", "my world") fmt.Println(result...) }