mirror of
				https://github.com/lzh-1625/go_process_manager.git
				synced 2025-10-31 03:16:25 +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)
 | |
| }
 | 
