-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.go
131 lines (118 loc) · 2.36 KB
/
util.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
122
123
124
125
126
127
128
129
130
131
package env
import (
"os"
"path/filepath"
"strconv"
"strings"
"time"
)
// Path 根据应用根目录获取路径
func Path(paths ...string) string {
if len(paths) == 0 {
return RootPath
}
return filepath.Join(RootPath, strings.Join(paths, "/"))
}
func Lookup(name string) (val string, exists bool) {
val, exists = os.LookupEnv(name)
if exists && len(val) == 0 {
exists = false
}
return
}
func Exists(name string) bool {
_, exists := Lookup(name)
return exists
}
func Unknown(name string, value ...interface{}) interface{} {
if val, ok := Lookup(name); ok {
return val
}
if len(value) > 0 {
return value[0]
}
return nil
}
func String(name string, value ...string) string {
if val, ok := Lookup(name); ok {
return val
}
if len(value) > 0 {
return value[0]
}
return ""
}
func Bytes(name string, value ...[]byte) []byte {
if val, ok := Lookup(name); ok {
return []byte(val)
}
if len(value) > 0 {
return value[0]
}
return []byte{}
}
func Int(name string, value ...int) int {
if val, ok := Lookup(name); ok {
n, err := strconv.Atoi(val)
if err == nil {
return n
}
}
if len(value) > 0 {
return value[0]
}
return 0
}
func Duration(name string, value ...time.Duration) time.Duration {
if val, ok := Lookup(name); ok {
if n, err := strconv.Atoi(val); err == nil {
return time.Duration(n)
}
if d, err := time.ParseDuration(val); err == nil {
return d
}
}
if len(value) > 0 {
return value[0]
}
return time.Duration(0)
}
func Bool(name string, value ...bool) bool {
if val, ok := Lookup(name); ok {
bl, err := strconv.ParseBool(val)
if err == nil {
return bl
}
}
if len(value) > 0 {
return value[0]
}
return false
}
func Map(prefix string) map[string]string {
prefix = prefix + "_"
result := map[string]string{}
for _, value := range os.Environ() {
if strings.HasPrefix(value, prefix) {
parts := strings.SplitN(value, "=", 2)
name := strings.TrimPrefix(parts[0], prefix)
result[name] = strings.TrimSpace(parts[1])
}
}
return result
}
func Where(filter func(name string, value string) bool) map[string]string {
result := map[string]string{}
for _, value := range os.Environ() {
parts := strings.SplitN(value, "=", 2)
name := parts[0]
val := strings.TrimSpace(parts[1])
if filter(name, val) {
result[name] = val
}
}
return result
}
func Environ() []string {
return os.Environ()
}