-
Notifications
You must be signed in to change notification settings - Fork 6
/
config.go
69 lines (61 loc) · 1.61 KB
/
config.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
60
61
62
63
64
65
66
67
68
69
// Package config 包含解析配置文件相关工具
package config
import (
"io/ioutil"
"sync"
)
// 配置信息存储接口
type Config interface {
// GlobalSection 获取全局配置段
GlobalSection() Section
// Section 根据name获取指定名称的配置段
Section(name string) (Section, bool)
// Sections 返回全部节
Sections() []Section
}
// 配置信息段
type Section interface {
// Name 配置段名称
Name() string
// String 获取字符串
String(key string) (string, error)
// Int 获取整数
Int(key string) (int, error)
// Bool 获取布尔值
Bool(key string) (bool, error)
// Float 获取浮点值
Float(key string) (float64, error)
}
// 配置解析方法
type ConfigParser func([]byte) (Config, error)
var (
parsersMu sync.Mutex //互斥锁
parsers = make(map[string]ConfigParser) //配置解析器
)
// NewConfig 创建一个新的Config
// path:配置文件路径
func NewConfig(kind string, path string) (Config, error) {
var data, err = ioutil.ReadFile(path)
if err != nil {
return nil, ErrorReadError.Format(path).Error()
}
return NewConfigWithContent(kind, data)
}
// NewConfigWithContent 创建一个新的Config
// content:配置文件内容
func NewConfigWithContent(kind string, content []byte) (Config, error) {
var parser, ok = parsers[kind]
if !ok {
return nil, ErrorInvalidConfigKind.Format(kind).Error()
}
return parser(content)
}
// Register 注册ConfigParser
func Register(kind string, parser ConfigParser) {
if parser == nil {
panic(ErrorInvalidConfigParser)
}
parsersMu.Lock()
defer parsersMu.Unlock()
parsers[kind] = parser
}