-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathglobal.go
121 lines (96 loc) · 2.41 KB
/
global.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package di
import (
"context"
"os"
"strings"
)
var g DI
func init() {
g = New()
}
func RegisterBean(bean interface{}) DI {
return g.RegisterBean(bean)
}
func RegisterNamedBean(name string, bean interface{}) DI {
return g.RegisterNamedBean(name, bean)
}
func Provide(prototype interface{}) DI {
return g.Provide(prototype)
}
func ProvideNamedBean(beanName string, prototype interface{}) DI {
return g.ProvideNamedBean(beanName, prototype)
}
func GetBean(beanName string) (bean interface{}, ok bool) {
return g.GetBean(beanName)
}
func GetByType(beanType interface{}) (bean interface{}, ok bool) {
return g.GetByType(beanType)
}
func GetByTypeAll(beanType interface{}) (beans []BeanWithName) {
return g.GetByTypeAll(beanType)
}
func NewBean(beanType interface{}) (bean interface{}) {
return g.NewBean(beanType)
}
func NewBeanByName(beanName string) (bean interface{}) {
return g.NewBeanByName(beanName)
}
func UseValueStore(v ValueStore) DI {
g.UseValueStore(v)
return g
}
func Property() ValueStore {
return g.Property()
}
func SetDefaultProperty(key string, value interface{}) DI {
return g.SetDefaultProperty(key, value)
}
func SetDefaultPropertyMap(properties map[string]interface{}) DI {
return g.SetDefaultPropertyMap(properties)
}
func SetProperty(key string, value interface{}) DI {
return g.SetProperty(key, value)
}
func SetPropertyMap(properties map[string]interface{}) DI {
return g.SetPropertyMap(properties)
}
func GetProperty(key string) interface{} {
return g.GetProperty(key)
}
func LoadProperties(prefix string, propertyType interface{}) interface{} {
return g.LoadProperties(prefix, propertyType)
}
func AutoMigrateEnv() {
envMap := LoadEnvironment(strings.NewReplacer("_", "."), false)
SetPropertyMap(envMap)
}
func LoadEnvironment(replacer *strings.Replacer, trimPrefix bool, prefix ...string) map[string]interface{} {
environ := os.Environ()
envMap := make(map[string]interface{}, len(environ))
for _, env := range environ {
kv := strings.SplitN(env, "=", 2)
if ok, pfx := hasPrefix(kv[0], prefix); !ok {
continue
} else if trimPrefix {
kv[0] = strings.TrimPrefix(kv[0], pfx)
}
var property string
if replacer != nil {
property = replacer.Replace(kv[0])
} else {
property = kv[0]
}
envMap[property] = kv[1]
}
return envMap
}
func Load() {
g.Load()
}
func Serve(ctx context.Context) {
g.Serve(ctx)
}
func LoadAndServ(ctx context.Context) {
g.Load()
g.Serve(ctx)
}