121 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
package utils
 | 
						||
 | 
						||
import (
 | 
						||
    "crypto/md5"
 | 
						||
    "encoding/hex"
 | 
						||
    "math/rand"
 | 
						||
    "os/exec"
 | 
						||
    "time"
 | 
						||
    "runtime"
 | 
						||
    "github.com/Tang-RoseChild/mahonia"
 | 
						||
    "strings"
 | 
						||
    "os"
 | 
						||
)
 | 
						||
 | 
						||
 | 
						||
// 执行shell命令,可设置执行超时时间
 | 
						||
func ExecShellWithTimeout(timeout int, command string, args... string) (string, error)  {
 | 
						||
    cmd := exec.Command(command, args...)
 | 
						||
 | 
						||
    // 不限制超时时间
 | 
						||
    if timeout <= 0 {
 | 
						||
        output ,err := cmd.CombinedOutput()
 | 
						||
        return string(output), err
 | 
						||
    }
 | 
						||
    d := time.Duration(timeout) * time.Second
 | 
						||
    timer := time.AfterFunc(d, func() {
 | 
						||
        // 超时kill进程
 | 
						||
        cmd.Process.Kill()
 | 
						||
    })
 | 
						||
    output ,err := cmd.CombinedOutput()
 | 
						||
    timer.Stop()
 | 
						||
 | 
						||
    return string(output), err
 | 
						||
}
 | 
						||
 | 
						||
// 生成长度为length的随机字符串
 | 
						||
func RandString(length int64) string {
 | 
						||
    sources := []byte("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
 | 
						||
    result := []byte{}
 | 
						||
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
 | 
						||
    sourceLength := len(sources)
 | 
						||
    var i int64 = 0
 | 
						||
    for ; i < length; i++ {
 | 
						||
        result = append(result, sources[r.Intn(sourceLength)])
 | 
						||
    }
 | 
						||
 | 
						||
    return string(result)
 | 
						||
}
 | 
						||
 | 
						||
// 生成32位MD5摘要
 | 
						||
func Md5(str string) string {
 | 
						||
    m := md5.New()
 | 
						||
    m.Write([]byte(str))
 | 
						||
 | 
						||
    return hex.EncodeToString(m.Sum(nil))
 | 
						||
}
 | 
						||
 | 
						||
// 生成0-max之间随机数
 | 
						||
func RandNumber(max int) int {
 | 
						||
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
 | 
						||
 | 
						||
    return r.Intn(max)
 | 
						||
}
 | 
						||
 | 
						||
// 判断当前系统是否是windows
 | 
						||
func IsWindows() bool {
 | 
						||
    return runtime.GOOS == "windows"
 | 
						||
}
 | 
						||
 | 
						||
// GBK编码转换为UTF8
 | 
						||
func GBK2UTF8(s string) (string, bool) {
 | 
						||
    dec := mahonia.NewDecoder("gbk")
 | 
						||
 | 
						||
    return dec.ConvertStringOK(s)
 | 
						||
}
 | 
						||
 | 
						||
// 批量替换字符串
 | 
						||
func ReplaceStrings(s string, old []string, replace []string) string  {
 | 
						||
    if s == "" {
 | 
						||
        return s
 | 
						||
    }
 | 
						||
    if len(old) != len(replace) {
 | 
						||
        return s
 | 
						||
    }
 | 
						||
 | 
						||
    for i, v := range old {
 | 
						||
        s = strings.Replace(s, v, replace[i], 1000)
 | 
						||
    }
 | 
						||
 | 
						||
    return s
 | 
						||
}
 | 
						||
 | 
						||
func InStringSlice(slice []string, element string) bool {
 | 
						||
    for _, v := range slice {
 | 
						||
        if v == element {
 | 
						||
            return true
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    return false
 | 
						||
}
 | 
						||
 | 
						||
// 转义json特殊字符
 | 
						||
func EscapeJson(s string) string  {
 | 
						||
    specialChars := []string{"\\", "\b","\f", "\n", "\r", "\t", "\"",}
 | 
						||
    replaceChars := []string{ "\\\\", "\\b", "\\f", "\\n", "\\r", "\\t", "\\\"",}
 | 
						||
 | 
						||
    return ReplaceStrings(s, specialChars, replaceChars)
 | 
						||
}
 | 
						||
 | 
						||
func FileExist(file string) bool {
 | 
						||
    _, err := os.Stat(file)
 | 
						||
    if os.IsNotExist(err) {
 | 
						||
        return false
 | 
						||
    }
 | 
						||
    if os.IsPermission(err) {
 | 
						||
        return false
 | 
						||
    }
 | 
						||
 | 
						||
    return true
 | 
						||
} |