diff options
Diffstat (limited to 'plugin.go')
| -rw-r--r-- | plugin.go | 30 |
1 files changed, 28 insertions, 2 deletions
@@ -1,5 +1,10 @@ package gui +// This is based off of the excellent example and documentation here: +// https://github.com/vladimirvivien/go-plugin-example +// There truly are great people in this world. +// It's a pleasure to be here with all of you + import ( "log" "os" @@ -8,6 +13,7 @@ import ( "github.com/davecgh/go-spew/spew" ) +// TODO: could a protobuf work here? type Greeter interface { Greet() JcarrButton() @@ -15,6 +21,7 @@ type Greeter interface { } var PlugGocli *plugin.Plugin +var PlugGocliOk bool var PlugHello *plugin.Plugin // var gBut plugin.Symbol @@ -23,6 +30,9 @@ var symGreeter plugin.Symbol var greeter Greeter var ok bool +var typeToolkit plugin.Symbol +var typeToolkitCast Greeter + func LoadPlugin(name string) *plugin.Plugin { scs := spew.ConfigState{MaxDepth: 1} @@ -33,12 +43,19 @@ func LoadPlugin(name string) *plugin.Plugin { log.Println(scs.Sdump(plug)) if err != nil { log.Println(err) - os.Exit(1) + return nil } - PlugGocli = plug // 2. look up a symbol (an exported function or variable) // in this case, variable Greeter + typeToolkit, err = plug.Lookup("Toolkit") + log.Println("plugin.Toolkit", typeToolkit) + log.Println(scs.Sdump(typeToolkit)) + if err != nil { + log.Println(err) + os.Exit(1) + } + symGreeter, err = plug.Lookup("Greeter") log.Println("symGreater", symGreeter) log.Println(scs.Sdump(symGreeter)) @@ -57,6 +74,14 @@ func LoadPlugin(name string) *plugin.Plugin { log.Println("unexpected type from module symbol") os.Exit(1) } + + /* + typeToolkitCast, ok = typeToolkit.(Greeter) + if !ok { + log.Println("unexpected cast of Toolkit to Greeter") + os.Exit(1) + } + */ return plug } @@ -66,6 +91,7 @@ func RunGreet() { log.Println("wit/gui gocui plugin didn't load") return } + PlugGocliOk = true greeter.Greet() } |
