| package common | |
| import ( | |
| "fmt" | |
| "github.com/google/uuid" | |
| "html/template" | |
| "log" | |
| "math/rand" | |
| "net" | |
| "os" | |
| "os/exec" | |
| "runtime" | |
| "strconv" | |
| "strings" | |
| "time" | |
| ) | |
| func OpenBrowser(url string) { | |
| var err error | |
| switch runtime.GOOS { | |
| case "linux": | |
| err = exec.Command("xdg-open", url).Start() | |
| case "windows": | |
| err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() | |
| case "darwin": | |
| err = exec.Command("open", url).Start() | |
| } | |
| if err != nil { | |
| log.Println(err) | |
| } | |
| } | |
| func GetIp() (ip string) { | |
| ips, err := net.InterfaceAddrs() | |
| if err != nil { | |
| log.Println(err) | |
| return ip | |
| } | |
| for _, a := range ips { | |
| if ipNet, ok := a.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { | |
| if ipNet.IP.To4() != nil { | |
| ip = ipNet.IP.String() | |
| if strings.HasPrefix(ip, "10") { | |
| return | |
| } | |
| if strings.HasPrefix(ip, "172") { | |
| return | |
| } | |
| if strings.HasPrefix(ip, "192.168") { | |
| return | |
| } | |
| ip = "" | |
| } | |
| } | |
| } | |
| return | |
| } | |
| var sizeKB = 1024 | |
| var sizeMB = sizeKB * 1024 | |
| var sizeGB = sizeMB * 1024 | |
| func Bytes2Size(num int64) string { | |
| numStr := "" | |
| unit := "B" | |
| if num/int64(sizeGB) > 1 { | |
| numStr = fmt.Sprintf("%.2f", float64(num)/float64(sizeGB)) | |
| unit = "GB" | |
| } else if num/int64(sizeMB) > 1 { | |
| numStr = fmt.Sprintf("%d", int(float64(num)/float64(sizeMB))) | |
| unit = "MB" | |
| } else if num/int64(sizeKB) > 1 { | |
| numStr = fmt.Sprintf("%d", int(float64(num)/float64(sizeKB))) | |
| unit = "KB" | |
| } else { | |
| numStr = fmt.Sprintf("%d", num) | |
| } | |
| return numStr + " " + unit | |
| } | |
| func Seconds2Time(num int) (time string) { | |
| if num/31104000 > 0 { | |
| time += strconv.Itoa(num/31104000) + " 年 " | |
| num %= 31104000 | |
| } | |
| if num/2592000 > 0 { | |
| time += strconv.Itoa(num/2592000) + " 个月 " | |
| num %= 2592000 | |
| } | |
| if num/86400 > 0 { | |
| time += strconv.Itoa(num/86400) + " 天 " | |
| num %= 86400 | |
| } | |
| if num/3600 > 0 { | |
| time += strconv.Itoa(num/3600) + " 小时 " | |
| num %= 3600 | |
| } | |
| if num/60 > 0 { | |
| time += strconv.Itoa(num/60) + " 分钟 " | |
| num %= 60 | |
| } | |
| time += strconv.Itoa(num) + " 秒" | |
| return | |
| } | |
| func Interface2String(inter interface{}) string { | |
| switch inter.(type) { | |
| case string: | |
| return inter.(string) | |
| case int: | |
| return fmt.Sprintf("%d", inter.(int)) | |
| case float64: | |
| return fmt.Sprintf("%f", inter.(float64)) | |
| } | |
| return "Not Implemented" | |
| } | |
| func UnescapeHTML(x string) interface{} { | |
| return template.HTML(x) | |
| } | |
| func IntMax(a int, b int) int { | |
| if a >= b { | |
| return a | |
| } else { | |
| return b | |
| } | |
| } | |
| func GetUUID() string { | |
| code := uuid.New().String() | |
| code = strings.Replace(code, "-", "", -1) | |
| return code | |
| } | |
| const keyChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" | |
| func init() { | |
| rand.Seed(time.Now().UnixNano()) | |
| } | |
| func GenerateKey() string { | |
| rand.Seed(time.Now().UnixNano()) | |
| key := make([]byte, 48) | |
| for i := 0; i < 16; i++ { | |
| key[i] = keyChars[rand.Intn(len(keyChars))] | |
| } | |
| uuid_ := GetUUID() | |
| for i := 0; i < 32; i++ { | |
| c := uuid_[i] | |
| if i%2 == 0 && c >= 'a' && c <= 'z' { | |
| c = c - 'a' + 'A' | |
| } | |
| key[i+16] = c | |
| } | |
| return string(key) | |
| } | |
| func GetRandomString(length int) string { | |
| rand.Seed(time.Now().UnixNano()) | |
| key := make([]byte, length) | |
| for i := 0; i < length; i++ { | |
| key[i] = keyChars[rand.Intn(len(keyChars))] | |
| } | |
| return string(key) | |
| } | |
| func GetTimestamp() int64 { | |
| return time.Now().Unix() | |
| } | |
| func Max(a int, b int) int { | |
| if a >= b { | |
| return a | |
| } else { | |
| return b | |
| } | |
| } | |
| func GetOrDefault(env string, defaultValue int) int { | |
| if env == "" || os.Getenv(env) == "" { | |
| return defaultValue | |
| } | |
| num, err := strconv.Atoi(os.Getenv(env)) | |
| if err != nil { | |
| SysError(fmt.Sprintf("failed to parse %s: %s, using default value: %d", env, err.Error(), defaultValue)) | |
| return defaultValue | |
| } | |
| return num | |
| } | |