package common import ( "crypto/rand" "encoding/json" "math/big" ) // JSONStringToStruct 将 JSON 字符串反序列化到指定结构体类型 func JSONStringToStruct[T any](jsonStr string) (*T, error) { var result T if err := json.Unmarshal([]byte(jsonStr), &result); err != nil { return nil, err } return &result, nil } func JSONStringToMap(jsonStr string) (map[string]interface{}, error) { var result map[string]interface{} if err := json.Unmarshal([]byte(jsonStr), &result); err != nil { return nil, err } return result, nil } // GenerateCode 生成指定长度的随机邀请码(大写字母+数字) // 不会返回错误,如果随机失败,会自动重试 func GenerateCode(length int) string { const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" code := make([]byte, length) for i := 0; i < length; i++ { for { num, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset)))) if err != nil { // 随机失败,重试 continue } code[i] = charset[num.Int64()] break } } return string(code) }