plugintest.go 660 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package main
  2. import (
  3. "log"
  4. "plugin"
  5. "time"
  6. "dev.hexasoftware.com/stdio/plugintest/native/plugbase"
  7. )
  8. func main() {
  9. for {
  10. callPlugin()
  11. <-time.After(2 * time.Second) // wait 2 sec
  12. }
  13. }
  14. func callPlugin() {
  15. defer func() {
  16. if r := recover(); r != nil {
  17. log.Println("Recover")
  18. }
  19. }()
  20. var err error
  21. //Reopen plugin
  22. plug, err := plugin.Open("plugins/bin/plugin1.so")
  23. panicIfErr(err)
  24. pluginfo, err := plug.Lookup("Info")
  25. panicIfErr(err)
  26. log.Println("s:", pluginfo.(*plugbase.PlugInfo).Author)
  27. fn, err := plug.Lookup("ExportedFunc")
  28. panicIfErr(err)
  29. fn.(func())()
  30. }
  31. func panicIfErr(err error) {
  32. if err != nil {
  33. panic(err)
  34. }
  35. }