Files
go_process_manager/utils/str.go
2025-02-13 10:35:34 +08:00

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)
}