99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"reflect"
|
|
"regexp"
|
|
"strings"
|
|
|
|
jsoniter "github.com/json-iterator/go"
|
|
)
|
|
|
|
const YMDHIS = "2006-01-02 15:04:05"
|
|
const YMD = "20060102"
|
|
|
|
// DeleteExtraSpace 多个空格替换为一个空格
|
|
func DeleteExtraSpace(s string) string {
|
|
//删除字符串中的多余空格,有多个空格时,仅保留一个空格
|
|
s1 := strings.Replace(s, " ", " ", -1) //替换tab为空格
|
|
regstr := "\\s{2,}" //两个及两个以上空格的正则表达式
|
|
reg, _ := regexp.Compile(regstr) //编译正则表达式
|
|
s2 := make([]byte, len(s1)) //定义字符数组切片
|
|
copy(s2, s1) //将字符串复制到切片
|
|
spcIndex := reg.FindStringIndex(string(s2)) //在字符串中搜索
|
|
for len(spcIndex) > 0 { //找到适配项
|
|
s2 = append(s2[:spcIndex[0]+1], s2[spcIndex[1]:]...) //删除多余空格
|
|
spcIndex = reg.FindStringIndex(string(s2)) //继续在字符串中搜索
|
|
}
|
|
return string(s2)
|
|
}
|
|
|
|
// GetStructKeys 获取结构体的keys
|
|
func GetStructKeys(obj any) []string {
|
|
// 通过反射将结构体转换成map
|
|
var keys []string
|
|
objT := reflect.TypeOf(obj)
|
|
for i := 0; i < objT.NumField(); i++ {
|
|
fileName, ok := objT.Field(i).Tag.Lookup("json")
|
|
if ok {
|
|
keys = append(keys, fileName)
|
|
} else {
|
|
keys = append(keys, objT.Field(i).Name)
|
|
}
|
|
}
|
|
return keys
|
|
}
|
|
|
|
// Struct2map 结构体转map
|
|
func Struct2map(obj any) (data map[string]any, err error) {
|
|
// 通过反射将结构体转换成map
|
|
data = make(map[string]any)
|
|
objT := reflect.TypeOf(obj)
|
|
objV := reflect.ValueOf(obj)
|
|
for i := 0; i < objT.NumField(); i++ {
|
|
fileName, ok := objT.Field(i).Tag.Lookup("json")
|
|
if objV.Field(i).Interface() == nil {
|
|
continue
|
|
}
|
|
if ok {
|
|
data[fileName] = objV.Field(i).Interface()
|
|
} else {
|
|
data[objT.Field(i).Name] = objV.Field(i).Interface()
|
|
}
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
func IsString(obj interface{}) bool {
|
|
|
|
kind := reflect.ValueOf(obj).Kind()
|
|
|
|
return kind == reflect.String
|
|
}
|
|
|
|
func CheckInArrInt(list []int, val int) {
|
|
|
|
}
|
|
|
|
func CheckInStr(list []string, val string) bool {
|
|
for _, v := range list {
|
|
if v == val {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func JsonToStrArr(jsonStr string) ([]string, error) {
|
|
var arr []string
|
|
err := jsoniter.Unmarshal([]byte(jsonStr), &arr)
|
|
|
|
return arr, err
|
|
}
|
|
|
|
func StrToStrArr(jsonStr, sep string) []string {
|
|
arr := strings.Split(jsonStr, sep)
|
|
|
|
return arr
|
|
}
|