ソースを参照

Dedicated function for the plugin loading

Gildas Chabot 8 年 前
コミット
dc38bb1dc2
共有1 個のファイルを変更した18 個の追加7 個の削除を含む
  1. 18 7
      main.go

+ 18 - 7
main.go

@@ -1,11 +1,24 @@
1 1
 package main
2 2
 
3 3
 import (
4
+	"log"
4 5
 	"os"
5 6
 	"path"
6 7
 	"plugin"
7 8
 )
8 9
 
10
+func loadPlugin(path string) (func(string), error) {
11
+	p, err := plugin.Open(path)
12
+	if err != nil {
13
+		return nil, err
14
+	}
15
+	sayHello, err := p.Lookup("SayHello")
16
+	if err != nil {
17
+		return nil, err
18
+	}
19
+	return sayHello.(func(string)), nil
20
+}
21
+
9 22
 func getPlugins(pluginDir string) ([]func(string), error) {
10 23
 	pDir, err := os.Open(pluginDir)
11 24
 	if err != nil {
@@ -21,15 +34,13 @@ func getPlugins(pluginDir string) ([]func(string), error) {
21 34
 		if pFile.IsDir() {
22 35
 			continue
23 36
 		}
24
-		p, err := plugin.Open(path.Join(pluginDir, pFile.Name()))
25
-		if err != nil {
26
-			return nil, err
27
-		}
28
-		sayHello, err := p.Lookup("SayHello")
37
+
38
+		p, err := loadPlugin(path.Join(pluginDir, pFile.Name()))
29 39
 		if err != nil {
30
-			return nil, err
40
+			log.Printf("Failed to load pluging %s", p)
41
+		} else {
42
+			ret = append(ret, p)
31 43
 		}
32
-		ret = append(ret, sayHello.(func(string)))
33 44
 	}
34 45
 	return ret, nil
35 46
 }