package util import ( "crypto/md5" "encoding/hex" "encoding/json" "io" "math" "math/rand" "mime/multipart" "os" "reflect" "strings" "time" "github.com/google/uuid" ) var ( ToolsUtil = toolsUtil{} allRandomStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ) // toolsUtil 常用工具集合类 type toolsUtil struct{} // RandomString 返回随机字符串 func (tu toolsUtil) RandomString(length int) string { r := rand.New(rand.NewSource(time.Now().UnixNano())) byteList := make([]byte, length) for i := 0; i < length; i++ { byteList[i] = allRandomStr[r.Intn(62)] } return string(byteList) } // MakeUuidV7 制作UUID v7 func (tu toolsUtil) MakeUuidV7() string { v7, err := uuid.NewV7() if err != nil { return "" } return strings.ReplaceAll(v7.String(), "-", "") } // MakeMd5 制作MD5 func (tu toolsUtil) MakeMd5(data string) string { sum := md5.Sum([]byte(data)) return hex.EncodeToString(sum[:]) } // GetFileMD5 获取文件MD5 func (tu toolsUtil) GetFileMD5(file *multipart.FileHeader) (string, error) { f, err := file.Open() if err != nil { return "", err } defer f.Close() hash := md5.New() if _, err := io.Copy(hash, f); err != nil { return "", err } return hex.EncodeToString(hash.Sum(nil)), nil } // Contains 判断src是否包含elem元素 func (tu toolsUtil) Contains(src interface{}, elem interface{}) bool { srcArr := reflect.ValueOf(src) if srcArr.Kind() == reflect.Ptr { srcArr = srcArr.Elem() } if srcArr.Kind() == reflect.Slice { for i := 0; i < srcArr.Len(); i++ { if srcArr.Index(i).Interface() == elem { return true } } } return false } // Round float四舍五入 func (tu toolsUtil) Round(val float64, n int) float64 { base := math.Pow(10, float64(n)) return math.Round(base*val) / base } // JsonToObj JSON转Obj func (tu toolsUtil) JsonToObj(jsonStr string, toVal interface{}) (err error) { return json.Unmarshal([]byte(jsonStr), &toVal) } // ObjToJson Obj转JSON func (tu toolsUtil) ObjToJson(data interface{}) (res string, err error) { b, err := json.Marshal(data) if err != nil { return res, err } res = string(b) return res, nil } // IsFileExist 判断文件或目录是否存在 func (tu toolsUtil) IsFileExist(path string) bool { var root, err = os.OpenRoot(".") if err != nil { return false } defer root.Close() _, err = root.Stat(path) return err == nil || os.IsExist(err) } // 创建文件夹 func (tu toolsUtil) CreateDir(path string) error { var root, err = os.OpenRoot(".") if err != nil { return err } defer root.Close() return root.Mkdir(path, 0755) } func (tu toolsUtil) WriteFile(path string, data []byte) error { return os.WriteFile(path, data, 0644) }