package utils import ( "encoding/json" "reflect" "regexp" "strings" ) 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 := json.Unmarshal([]byte(jsonStr), &arr) return arr, err } func StrToStrArr(jsonStr, sep string) []string { arr := strings.Split(jsonStr, sep) return arr }