-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathloader.go
59 lines (51 loc) · 1.19 KB
/
loader.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package cube
import (
log "github.com/sirupsen/logrus"
"github.com/skeletongo/cube/tools"
)
var Config = tools.GetViper("config")
// Package 功能模块
type Package interface {
// Name 模块名称
Name() string
// Init 初始化方法
Init() error
// Close 关闭方法
Close() error
}
var packages = make(map[string]Package)
// Register 注册模块
func Register(p Package) {
packages[p.Name()] = p
}
// Load 加载功能模块
// filePath 配置文件路径
func Load() {
var err error
for name := range Config.AllSettings() {
pkg, ok := packages[name]
if !ok {
log.Warnf("Package %v init data not exist.", name)
continue
}
if err = Config.UnmarshalKey(name, pkg); err != nil {
log.Errorf("Unmarshalling from config file error:%s", err)
continue
}
if err = pkg.Init(); err != nil {
log.Errorf("Initializing Package %s error:%s", pkg.Name(), err)
continue
}
log.Infof("Package [%16s] load success", pkg.Name())
}
}
// Close 关闭功能模块
func Close() {
for _, v := range packages {
if err := v.Close(); err != nil {
log.Errorf("Closing package %s error: %s", v.Name(), err)
} else {
log.Infof("Package [%16s] close success", v.Name())
}
}
}