package CommonUtil import ( "bufio" "bytes" "dsSso/Utils/IdCardUtil" "errors" "log" "net" "net/http" "os" "os/exec" "regexp" "strconv" "strings" "time" ) /** 功能:从一个数据库的查询返回结果中获取指定字段的IDS 作者:黄海 时间:2020-02-14 */ func Ids(list []map[string]interface{}, key string) []string { var ids []string for i := 0; i < len(list); i++ { switch list[i][key].(type) { case string: ids = append(ids, list[i][key].(string)) break case int64: ids = append(ids, strconv.FormatInt(list[i][key].(int64), 10)) } } return ids } /** 功能:判断是不是合法的日期格式 作者:黄海 时间: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-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 } /** 功能:获取当前的时间戳,精确度纳秒 作者:黄海 时间:2020-02-18 */ func GetCurrentTimestamp() int64 { return time.Now().UnixNano() } /** 功能:获取当前的时间字符串 作者:黄海 时间: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 } /** 功能:将整数64转为字符串 作者:黄海 时间:2020-04-17 */ func ConvertInt64ToString(i int64) string { s := strconv.FormatInt(i, 10) return s } /** 功能:判断所给路径文件/文件夹是否存在 作者: 黄海 时间:2020-03-26 */ func Exists(path string) bool { _, err := os.Stat(path) //os.Stat获取文件信息 if err != nil { if os.IsExist(err) { return true } return false } return true } /** 功能:获取访问的客户机IP 作者:黄海 时间:2020-03-26 */ func RemoteIp(req *http.Request) string { remoteAddr := req.RemoteAddr if ip := req.Header.Get("Remote_addr"); ip != "" { remoteAddr = ip } else { remoteAddr, _, _ = net.SplitHostPort(remoteAddr) } if remoteAddr == "::1" { remoteAddr = "127.0.0.1" } return remoteAddr } /** 功能:判断某一个值是否含在切片之中 作者:黄海 时间:2020-03-26 */ func InArray(need interface{}, haystack interface{}) bool { switch key := need.(type) { case int: for _, item := range haystack.([]int) { if item == key { return true } } case string: for _, item := range haystack.([]string) { if item == key { return true } } case int64: for _, item := range haystack.([]int64) { if item == key { return true } } case float64: for _, item := range haystack.([]float64) { if item == key { return true } } default: return false } return false } /** 功能:转换MapString 到MapInterface 万恶的map[string]string-->map[string]interface{} 作者:黄海 时间:2020-03-27 */ func ConvertMapStringToMapInterface(_bean map[string]string) map[string]interface{} { n := make(map[string]interface{}) for k, v := range _bean { n[k] = v } return n } /** 功能:带回显的执行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-06-03 */ func ConvertStringToInt(s string) int { int, _ := strconv.Atoi(s) return int } /** 功能:将字符串转为整数 作者:黄海 时间:2020-06-03 */ func ConvertStringToInt32(s string) int32 { int, _ := strconv.Atoi(s) return int32(int) } /** 功能:判断是不是合法的Email 作者:黄海 时间:2020-03-23 */ func IsEmail(email string) bool { pattern := `^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$` reg := regexp.MustCompile(pattern) return reg.MatchString(email) } /** 功能:判断是不是合法的身份证号 作者:黄海 时间:2020-06-16 */ func IsIdCard(idCard string) bool { IdCardNo := []byte(idCard) return IdCardUtil.IsValidIdCardNo(&IdCardNo) }