Przeglądaj źródła

Plugins POC with Hello World

Gildas Chabot 8 lat temu
commit
d2ea30c025
4 zmienionych plików z 58 dodań i 0 usunięć
  1. 16 0
      buildAndRun.sh
  2. 20 0
      main.go
  3. 11 0
      plugin/plugin.go
  4. 11 0
      plugin2/plugin2.go

+ 16 - 0
buildAndRun.sh

@@ -0,0 +1,16 @@
1
+#!/usr/bin/env bash
2
+
3
+set -x
4
+
5
+# Compile plugins
6
+
7
+(cd plugin; docker run --rm -v "$PWD":/usr/src/plugin -w /usr/src/plugin golang:1.8 go build -buildmode=plugin)
8
+(cd plugin2; docker run --rm -v "$PWD":/usr/src/plugin2 -w /usr/src/plugin2 golang:1.8 go build -buildmode=plugin)
9
+
10
+# Compile main app
11
+
12
+docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.8 go build
13
+
14
+# Run it
15
+
16
+./myapp plugin/plugin.so plugin2/plugin2.so

+ 20 - 0
main.go

@@ -0,0 +1,20 @@
1
+package main
2
+
3
+import (
4
+	"os"
5
+	"plugin"
6
+)
7
+
8
+func main() {
9
+	for _, pName := range os.Args[1:] {
10
+		p, err := plugin.Open(pName)
11
+		if err != nil {
12
+			panic(err)
13
+		}
14
+		sayHello, err := p.Lookup("SayHello")
15
+		if err != nil {
16
+			panic(err)
17
+		}
18
+		sayHello.(func(string))("Gildas")
19
+	}
20
+}

+ 11 - 0
plugin/plugin.go

@@ -0,0 +1,11 @@
1
+package main
2
+
3
+import "fmt"
4
+
5
+func SayHello(name string) {
6
+	fmt.Println("HELLO", name)
7
+}
8
+
9
+func main() {
10
+	fmt.Println("Coucou")
11
+}

+ 11 - 0
plugin2/plugin2.go

@@ -0,0 +1,11 @@
1
+package main
2
+
3
+import "fmt"
4
+
5
+func SayHello(name string) {
6
+	fmt.Println("Bonjour, je m'appelle", name)
7
+}
8
+
9
+func main() {
10
+	fmt.Println("Coucou")
11
+}