package common import ( "encoding/base64" "encoding/json" "math/rand" "strconv" "unsafe" ) func GetStringIfEmpty(str string, defaultValue string) string { if str == "" { return defaultValue } return str } 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 MapToJsonStr(m map[string]interface{}) string { bytes, err := json.Marshal(m) if err != nil { return "" } return string(bytes) } func StrToMap(str string) (map[string]interface{}, error) { m := make(map[string]interface{}) err := Unmarshal([]byte(str), &m) if err != nil { return nil, err } return m, nil } func StrToJsonArray(str string) ([]interface{}, error) { var js []interface{} err := json.Unmarshal([]byte(str), &js) if err != nil { return nil, err } return js, nil } func IsJsonArray(str string) bool { var js []interface{} return json.Unmarshal([]byte(str), &js) == nil } func IsJsonObject(str string) bool { var js map[string]interface{} return json.Unmarshal([]byte(str), &js) == nil } func String2Int(str string) int { num, err := strconv.Atoi(str) if err != nil { return 0 } return num } func StringsContains(strs []string, str string) bool { for _, s := range strs { if s == str { return true } } return false } // StringToByteSlice []byte only read, panic on append func StringToByteSlice(s string) []byte { tmp1 := (*[2]uintptr)(unsafe.Pointer(&s)) tmp2 := [3]uintptr{tmp1[0], tmp1[1], tmp1[1]} return *(*[]byte)(unsafe.Pointer(&tmp2)) } func EncodeBase64(str string) string { return base64.StdEncoding.EncodeToString([]byte(str)) } func GetJsonString(data any) string { if data == nil { return "" } b, _ := json.Marshal(data) return string(b) }