mirror of
https://github.com/lzh-1625/go_process_manager.git
synced 2025-10-04 07:36:57 +08:00
94 lines
1.6 KiB
Go
94 lines
1.6 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"math/rand"
|
|
"regexp"
|
|
"sort"
|
|
"strings"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
var ansiEscapeRegex = regexp.MustCompile(`\x1b\[[0-9;]*[a-zA-Z]`)
|
|
|
|
func RemoveNotValidUtf8InString(s string) string {
|
|
ret := s
|
|
if !utf8.ValidString(s) {
|
|
v := make([]rune, 0, len(s))
|
|
for i, r := range s {
|
|
if r == utf8.RuneError {
|
|
_, size := utf8.DecodeRuneInString(s[i:])
|
|
if size == 1 {
|
|
continue
|
|
}
|
|
}
|
|
v = append(v, r)
|
|
}
|
|
ret = string(v)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func RemoveANSI(input string) string {
|
|
return ansiEscapeRegex.ReplaceAllString(input, "")
|
|
}
|
|
|
|
func RandString(n int) (ret string) {
|
|
allString := "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789"
|
|
ret = ""
|
|
for i := 0; i < n; i++ {
|
|
r := rand.Intn(len(allString))
|
|
ret = ret + allString[r:r+1]
|
|
}
|
|
return
|
|
}
|
|
|
|
type KVStr struct {
|
|
m map[string]any
|
|
}
|
|
|
|
func NewKVStr() *KVStr {
|
|
return &KVStr{
|
|
map[string]any{},
|
|
}
|
|
}
|
|
|
|
func (k *KVStr) Add(key string, value any) *KVStr {
|
|
k.m[key] = value
|
|
return k
|
|
}
|
|
|
|
func (k *KVStr) Build() string {
|
|
if len(k.m) == 0 {
|
|
return "-"
|
|
}
|
|
keys := make([]string, 0, len(k.m))
|
|
for key := range k.m {
|
|
keys = append(keys, key)
|
|
}
|
|
sort.Strings(keys)
|
|
strList := make([]string, 0, len(k.m))
|
|
for _, key := range keys {
|
|
if k.m[key] == "" {
|
|
continue
|
|
}
|
|
strList = append(strList, fmt.Sprintf("%s:%v", key, k.m[key]))
|
|
}
|
|
return strings.Join(strList, " , ")
|
|
}
|
|
|
|
func JsonStrToStruct[T any](str string) T {
|
|
var data T
|
|
json.Unmarshal([]byte(str), &data)
|
|
return data
|
|
}
|
|
|
|
func StructToJsonStr[T any](data T) string {
|
|
jsonStr, err := json.Marshal(data)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return string(jsonStr)
|
|
}
|