package common import ( "bytes" "crypto/md5" "encoding/hex" "github.com/go-playground/validator/v10" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" "io" "math/rand" "net/http" "os" "path/filepath" "strings" "time" ) // @Title 随机数种子 func init() { // 随机数种子 rand.Seed(time.Now().UnixNano()) } // @Title md5加密 func MD5(str string) string { h := md5.New() h.Write([]byte(str)) return hex.EncodeToString(h.Sum(nil)) } // @Title 生成随机数 func RandStr(n int, str ...string) string { s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" if len(str) > 0 { s = str[0] } res := "" for i := 0; i < n; i++ { res += string(s[rand.Intn(len(s))]) } return res } // @Title 处理验证错误消息 func GetVerErr(err error) string { er, ok := err.(validator.ValidationErrors) if ok { field := er[0].Field() if field == er[0].StructField() { field = strings.ToLower(field[0:1]) + field[1:] } switch er[0].Tag() { case "required": return field + "不能为空" case "min": if er[0].Type().String() == "string" { return field + "不能小于" + er[0].Param() + "位" } return field + "不能小于" + er[0].Param() } return field + "错误" } else { return "参数格式错误" } } // @Title 是否在数组中 func InArray(need interface{}, data interface{}) bool { if datas, ok := data.([]int); ok { for _, item := range datas { if item == need { return true } } } if datas, ok := data.([]uint); ok { for _, item := range datas { if item == need { return true } } } if datas, ok := data.([]string); ok { for _, item := range datas { if item == need { return true } } } return false } // CreateDateDir 根据当前日期来创建文件夹 func CreateDateDir(Path string) string { folderName := time.Now().Format("20060102") folderPath := filepath.Join(Path, folderName) if _, err := os.Stat(folderPath); os.IsNotExist(err) { os.MkdirAll(folderPath, 0755) } return folderName } // @Title 下载文件 func DownloadFormUrl(src string, filename string) error { res, err := http.Get(src) if err != nil { return err } defer res.Body.Close() // 获得get请求响应的reader对象 body, err := io.ReadAll(res.Body) if err != nil { return err } out, err := os.Create(filename) if err != nil { return err } if _, err := io.Copy(out, bytes.NewReader(body)); err != nil { return err } return nil } // @Title utf8转gbk func Utf8ToGbk(source string) string { result, _, _ := transform.String(simplifiedchinese.GBK.NewEncoder(), source) return result } // @Title gbk转utf8 func GbkToUtf8(source string) string { result, _, _ := transform.String(simplifiedchinese.GBK.NewDecoder(), source) return result }