/
string.go
123 lines (107 loc) · 2.45 KB
/
string.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
package utils
import (
"encoding/json"
"fmt"
"net/url"
"strings"
"github.com/tidwall/gjson"
)
func AddQueryToURL(urlStr string, queryMap map[string]string) string {
u, _ := url.Parse(urlStr)
q, _ := url.ParseQuery(u.RawQuery)
for k, v := range queryMap {
q.Add(k, v)
}
u.RawQuery = q.Encode()
return u.String()
}
// ContainsStr returns true if an str is present in a iteratee.
func ContainsStr(s []string, v string) bool {
for _, vv := range s {
if vv == v {
return true
}
}
return false
}
// RemoveDuplicates removes the duplicates strings from a Slice
func RemoveDuplicates(arr []string) []string {
allKeys := make(map[string]bool)
list := []string{}
for _, item := range arr {
if _, value := allKeys[item]; !value {
allKeys[item] = true
list = append(list, item)
}
}
return list
}
func SplitAndTrimSpace(s string, sep string) []string {
splitted := strings.Split(s, sep)
arr := []string{}
for _, v := range splitted {
arr = append(arr, strings.TrimSpace(v))
}
return RemoveBlankStrings(arr)
}
func RemoveBlankStrings(s []string) []string {
var r []string
for _, str := range s {
if strings.TrimSpace(str) != "" {
r = append(r, str)
}
}
return r
}
func TruncateString(str string, length int) string {
if length <= 0 {
return ""
}
// This code cannot support Chinese
// orgLen := len(str)
// if orgLen <= length {
// return str
// }
// return str[:length]
// Support Chinese
truncated := ""
count := 0
for _, char := range str {
truncated += string(char)
count++
if count >= length {
break
}
}
return truncated
}
//#region JSON Any To String (for Transfer)
//******************************************
// 任何类型转 String
//
// (bool) true => (string) "true"
// (int) 0 => (string) "0"
func ToString(val interface{}) string {
return fmt.Sprintf("%v", val)
}
// 将 JSON "数组中的"对象的 Values 全部转成 String 类型
// @note Array style is not the same as JSON Array, it uses the ToString() function.
//
// [{"a":233}, {"b":true}, {"c":"233"}]
// => [{"a":"233"}, {"b":"true"}, {"c":"233"}]
//
// @relevant ToString()
func JsonObjInArrAnyStr(jsonStr string) string {
var dest []map[string]string
for _, item := range gjson.Parse(jsonStr).Array() {
dItem := map[string]string{}
item.ForEach(func(key, value gjson.Result) bool {
dItem[key.String()] = value.String()
return true
})
dest = append(dest, dItem)
}
j, _ := json.Marshal(dest)
return string(j)
}
//#endregion