-
Notifications
You must be signed in to change notification settings - Fork 0
/
str.go
122 lines (105 loc) · 2.36 KB
/
str.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
package str
import (
"bytes"
"crypto/md5"
"encoding/json"
"fmt"
"math/rand"
"net/url"
"time"
)
// AllTrueFilter ...
var AllTrueFilter StringFilter = func(string) bool { return true }
// NotEmptyFilter ...
var NotEmptyFilter StringFilter = func(s string) bool { return s != "" }
// IdenticalMapper ...
var IdenticalMapper StringMapper = func(s string) string { return s }
// Urlencoder ...
var Urlencoder StringMapper = url.QueryEscape
// Urldecoder ...
var Urldecoder StringMapper = func(s string) string { return MustReturn(url.QueryUnescape(s)) }
// ContainStringFilter ...
func ContainStringFilter(strs ...string) StringFilter {
return func(s string) bool {
for _, t := range strs {
if t == s {
return true
}
}
return false
}
}
// ExcludeStringFilter ...
func ExcludeStringFilter(strs ...string) StringFilter {
cf := ContainStringFilter(strs...)
return func(s string) bool {
return !cf(s)
}
}
// Or return first NotEmpty string
func Or(vs ...string) string {
for _, v := range vs {
if v != "" {
return v
}
}
return ""
}
// Purify ...
func Purify(v interface{}) string {
switch vv := v.(type) {
case string:
return vv
case time.Time:
// rfc3339 time
return vv.Format("2006-01-02T15:04:05Z07:00")
case *time.Time:
return vv.Format("2006-01-02T15:04:05Z07:00")
default:
return fmt.Sprintf("%v", v)
}
}
// JsonStr ...
func JsonStr(v interface{}) string {
bs, _ := json.Marshal(v)
return string(bs)
}
// Join ...
func Join(delimiter string, elements ...string) string {
var buffer bytes.Buffer
prepend := ""
for _, ele := range elements {
buffer.WriteString(prepend)
buffer.WriteString(ele)
prepend = delimiter
}
return buffer.String()
}
// TransString map []string to []string
func TransString(mapper StringMapper, vs ...string) []string {
res := make([]string, 0, len(vs))
for _, v := range vs {
res = append(res, mapper(v))
}
return res
}
// MustReturn ...
func MustReturn(res string, _ error) string {
return res
}
// Md5 ...
func Md5(content string) string {
h := md5.New()
h.Write([]byte(content))
bs := h.Sum(nil)
return fmt.Sprintf("%x", bs)
}
var seededRand = rand.New(rand.NewSource(time.Now().UnixNano()))
// RandStrWithCharset ...
func RandStrWithCharset(length int, charset string) string {
b := make([]byte, length)
for i := range b {
b[i] = charset[seededRand.Intn(len(charset))]
}
return string(b)
}