package CommonUtil import ( "bufio" "bytes" "crypto/md5" "crypto/sha1" "dsSzxy/Utils/ConfigUtil" "encoding/hex" "encoding/json" "errors" "fmt" "github.com/astaxie/beego/httplib" uuid "github.com/satori/go.uuid" "net/http" "log" "github.com/spf13/viper" "math/rand" "os" "os/exec" "strconv" "strings" "time" ) /** 功能:获取UUID 作者:黄海 时间:2020-02-03 */ func GetUUID() string { u2 := strings.ToUpper(uuid.NewV4().String()) return u2 } /** 功能:将JSON字符串转化为map数组 作者: 黄海 时间:2020-04-17 */ func ConvertJsonStringToMapArray(data string) []map[string]interface{} { var m = make([]map[string]interface{}, 0) str := []byte(data) json.Unmarshal(str, &m) return m } func MD5(v string) string { d := []byte(v) m := md5.New() m.Write(d) return hex.EncodeToString(m.Sum(nil)) } // 判断所给路径文件/文件夹是否存在 func Exists(path string) bool { _, err := os.Stat(path) //os.Stat获取文件信息 if err != nil { if os.IsExist(err) { return true } return false } return true } //json字符串转map func JsonStringToMap(jsonStr string) (map[string]interface{}, error) { m := make(map[string]interface{}) err := json.Unmarshal([]byte(jsonStr), &m) if err != nil { fmt.Printf("Unmarshal with error: %+v\n", err) return nil, err } return m, nil } //将字符串转为int32整数 func ConvertStringToInt32(s string) int32 { i, _ := strconv.Atoi(s) return int32(i) } //将整数64转为字符串 func ConvertInt64ToString(i int64) string { s := strconv.FormatInt(i, 10) return s } /** 功能: 获取扩展名 */ func Ext(path string) string { for i := len(path) - 1; i >= 0 && path[i] != '/'; i-- { if path[i] == '.' { return path[i:] } } return "" } /** 功能:带回显的执行DOS命令 作者:黄海 时间:2020-05-18 */ func Exec(name string, args ...string) error { cmd := exec.Command(name, args...) stderr, _ := cmd.StderrPipe() stdout, _ := cmd.StdoutPipe() if err := cmd.Start(); err != nil { log.Println("exec the cmd ", name, " failed") return err } // 正常日志 logScan := bufio.NewScanner(stdout) go func() { for logScan.Scan() { log.Println(logScan.Text()) } }() // 错误日志 errBuf := bytes.NewBufferString("") scan := bufio.NewScanner(stderr) for scan.Scan() { s := scan.Text() log.Println("", s) errBuf.WriteString(s) errBuf.WriteString("\n") } // 等待命令执行完 cmd.Wait() if !cmd.ProcessState.Success() { // 执行失败,返回错误信息 return errors.New(errBuf.String()) } return nil } /** 功能:获取当前的时间字符串 作者:黄海 时间:2020-02-21 */ func GetCurrentTime() string { timeStr := time.Now().Format("2006-01-02 15:04:05") //当前时间的字符串,2006-01-02 15:04:05据说是golang的诞生时间,固定写法 return timeStr } /** 功能:获取6位随机数 作者:吴缤 */ func GetSixRandom() string { return fmt.Sprintf("%v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) } /** 功能:获取毫秒时间戳 作者:吴缤 */ func GetTimeStamp() string { return fmt.Sprintf("%v", time.Now().UnixNano()/1e6) } /** 功能:字符串SHA1加密 作者:吴缤 */ func SHA1(s string) string { o := sha1.New() o.Write([]byte(s)) return hex.EncodeToString(o.Sum(nil)) } /** 功能:获取融云配置信息 作者:吴缤 */ func GetRongYunConfig() (map[string]string, error) { m := make(map[string]string) viper.SetConfigFile(ConfigUtil.RongYunConfigPath) if err := viper.ReadInConfig(); err != nil { return nil, err } m["suffix"] = viper.GetString("rong_server_name") m["app_key"] = viper.GetString("rong_key") m["app_secret"] = viper.GetString("rong_secret") return m, nil } /** 功能:判断是不是合法的日期格式 作者:黄海 时间:2020-03-23 */ func IsDate(date string) bool { _, err := time.Parse("2006-01-02 15:04:05", date) if err != nil { return false } else { return true } } /** 功能:是不是在指定的数组中存在 作者:黄海 时间:2020-05-15 */ func IsContain(items []string, item string) bool { for _, eachItem := range items { if eachItem == item { return true } } return false } /** 功能:获取蛇形命名的字符串 作者:黄海 时间:2020-01-22 */ func GetSnakeCaseStr(str string) string { array := strings.Split(str, "_") var result string for i := 0; i < len(array); i++ { result = result + strings.ToUpper(array[i][0:1]) + array[i][1:] } return result } /** 功能:interface转string 作者:吴缤 日期:2021-09-06 */ func ConvertInterfaceToString(inter interface{}) string { str := fmt.Sprintf("%v", inter) return str } /** 功能:请求云平台接口时增加Cookie 作者:吴缤 日期:2021-09-13 */ func AddCookie(req *httplib.BeegoHTTPRequest, personIdCookie string, identityIdCookie string, tokenCookie string, qAccessTokenCookie string) { req.SetCookie(&http.Cookie{ Name: "person_id", Value: personIdCookie, Path: "/", Domain: ConfigUtil.DsidealYyDomain, }) req.SetCookie(&http.Cookie{ Name: "identity_id", Value: identityIdCookie, Path: "/", Domain: ConfigUtil.DsidealYyDomain, }) req.SetCookie(&http.Cookie{ Name: "token", Value: tokenCookie, Path: "/", Domain: ConfigUtil.DsidealYyDomain, }) req.SetCookie(&http.Cookie{ Name: "q_access_token", Value: qAccessTokenCookie, Path: "/", Domain: ConfigUtil.DsidealYyDomain, }) }