124 lines
2.5 KiB
Go
124 lines
2.5 KiB
Go
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
|