diff --git a/go-1-8/main.go b/go-1-8/main.go index e36f530..54b964d 100644 --- a/go-1-8/main.go +++ b/go-1-8/main.go @@ -5,6 +5,8 @@ import ( "log" "os" "plugin" + + "github.com/golang-rennes/demo-plugins/go-1-8/types" ) func main() { @@ -32,18 +34,18 @@ func registerPlugin(path string) (*Plugin, error) { return nil, err } - funcSymbol, err := p.Lookup("Greetings") + interfaceSymbol, err := p.Lookup("Greeter") if err != nil { return nil, err } - greet := funcSymbol.(func(...string) string) + greet := *interfaceSymbol.(*types.Greeter) log.Printf("Plugin successfully installed\n") plugin := &Plugin{ - Path: path, - Greetings: greet, + Path: path, + Greeter: greet, } return plugin, nil diff --git a/go-1-8/reverse/reverse.go b/go-1-8/reverse/reverse.go index 61157a2..8d9a487 100644 --- a/go-1-8/reverse/reverse.go +++ b/go-1-8/reverse/reverse.go @@ -3,8 +3,12 @@ package main import ( "C" "strings" + + "github.com/golang-rennes/demo-plugins/go-1-8/types" ) +type reverseGreeter struct{} + func reverse(s string) (result string) { for _, v := range s { result = string(v) + result @@ -12,7 +16,9 @@ func reverse(s string) (result string) { return } -func Greetings(args ...string) string { +func (g reverseGreeter) Greetings(args ...string) string { name := reverse(strings.Join(args, "_")) return name } + +var Greeter = types.Greeter(reverseGreeter{}) diff --git a/go-1-8/types.go b/go-1-8/types.go index fe0d93e..1c6ab0d 100644 --- a/go-1-8/types.go +++ b/go-1-8/types.go @@ -1,6 +1,8 @@ package main +import "github.com/golang-rennes/demo-plugins/go-1-8/types" + type Plugin struct { - Path string - Greetings func(...string) string + Path string + types.Greeter } diff --git a/go-1-8/types/func.go b/go-1-8/types/func.go new file mode 100644 index 0000000..7d45ec4 --- /dev/null +++ b/go-1-8/types/func.go @@ -0,0 +1,3 @@ +package types + +type MyFunc func(...string) string diff --git a/go-1-8/types/interface.go b/go-1-8/types/interface.go new file mode 100644 index 0000000..aba34ef --- /dev/null +++ b/go-1-8/types/interface.go @@ -0,0 +1,5 @@ +package types + +type Greeter interface { + Greetings(args ...string) string +} diff --git a/go-1-8/world/world.go b/go-1-8/world/world.go index aecb77d..3007581 100644 --- a/go-1-8/world/world.go +++ b/go-1-8/world/world.go @@ -3,8 +3,14 @@ package main import ( "C" "strings" + + "github.com/golang-rennes/demo-plugins/go-1-8/types" ) -func Greetings(args ...string) string { +type worldGreeter struct{} + +func (g worldGreeter) Greetings(args ...string) string { return "World " + strings.Join(args, " ") } + +var Greeter = types.Greeter(worldGreeter{})