82 lines
1.6 KiB
Go
Executable File
82 lines
1.6 KiB
Go
Executable File
package utils
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
func GenerateRandomString(length int, includeSpecialChar bool) string {
|
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
letters := "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
specialChars := ".!@_#%^&*()-+"
|
|
|
|
b := make([]rune, length)
|
|
|
|
letterProbability := len(letters) * 100 / (len(letters) + len(specialChars))
|
|
|
|
if includeSpecialChar {
|
|
for i := range b {
|
|
if rand.Intn(100) < letterProbability { // 概率选择字母
|
|
b[i] = rune(letters[rand.Intn(len(letters))])
|
|
} else { // 概率选择特殊字符
|
|
b[i] = rune(specialChars[rand.Intn(len(specialChars))])
|
|
}
|
|
}
|
|
} else {
|
|
for i := range b {
|
|
b[i] = rune(letters[rand.Intn(len(letters))])
|
|
}
|
|
}
|
|
|
|
return string(b)
|
|
}
|
|
|
|
func ByteSizeToString(size uint64) string {
|
|
const (
|
|
B = 1
|
|
KB = 1024 * B
|
|
MB = 1024 * KB
|
|
GB = 1024 * MB
|
|
TB = 1024 * GB
|
|
)
|
|
|
|
var unit string
|
|
var value float64
|
|
|
|
switch {
|
|
case size >= TB:
|
|
value = float64(size) / TB
|
|
unit = "TB"
|
|
case size >= GB:
|
|
value = float64(size) / GB
|
|
unit = "GB"
|
|
case size >= MB:
|
|
value = float64(size) / MB
|
|
unit = "MB"
|
|
case size >= KB:
|
|
value = float64(size) / KB
|
|
unit = "KB"
|
|
default:
|
|
value = float64(size)
|
|
unit = "B"
|
|
}
|
|
|
|
return fmt.Sprintf("%.2f %s", value, unit)
|
|
}
|
|
|
|
func Base64Encode(content string) string {
|
|
return base64.StdEncoding.EncodeToString([]byte(content))
|
|
}
|
|
|
|
func Base64Decode(content string) string {
|
|
decodeString, err := base64.StdEncoding.DecodeString(content)
|
|
if err != nil {
|
|
log.ErrorF("Base64Decode error: %s", err.Error())
|
|
return ""
|
|
}
|
|
return string(decodeString)
|
|
}
|