mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-10-06 00:27:00 +08:00
126 lines
2.7 KiB
Go
126 lines
2.7 KiB
Go
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)
|
|
}
|