diff --git a/utils/chinese/chinese.go b/utils/chinese/chinese.go new file mode 100644 index 0000000000000000000000000000000000000000..f21833cad385dc26d142e307c0ed1a627ca8f35e --- /dev/null +++ b/utils/chinese/chinese.go @@ -0,0 +1,37 @@ +/** + * @Time :2022/3/21 9:10 + * @Author :ZhangXiaoyu + */ + +package chinese + +var Chinese = new(chinese) + +type chinese struct{} + +// Len +/** + * @Description: 获取中文字符串长度 + * @receiver c + * @param str + * @return int + */ +func (c chinese) Len(str string) int { + rt := []rune(str) + return len(rt) +} + + +// Cut +/** + * @Description: 截取中文字符串 + * @receiver c + * @param str + * @param start + * @param end + * @return string + */ +func (c chinese) Cut(str string, start int, end int) string { + rt := []rune(str) + return string(rt[start:end]) +} diff --git a/utils/mapstruct/mapstruct.go b/utils/mapstruct/mapstruct.go new file mode 100644 index 0000000000000000000000000000000000000000..cd15aac015fb1e4f4e4923b8a4fefca5224bf13a --- /dev/null +++ b/utils/mapstruct/mapstruct.go @@ -0,0 +1,72 @@ +/** + * @Time :2022/3/30 16:15 + * @Author :ZhangXiaoyu + */ + +package mapstruct + +import ( + "github.com/json-iterator/go" + "github.com/mitchellh/mapstructure" + "reflect" +) + +var ( + json = jsoniter.ConfigCompatibleWithStandardLibrary +) + +type User struct { + Name string `json:"name"` + PhoneNumber string `json:"phone_number"` + UserName string `json:"userName"` + Hobbies []string `json:"hobbies"` +} + +// MapToStruct0 +/** + * @Description: Map转Struct + * @param m + * @param data + * @return err + */ +func MapToStruct0(m map[string]interface{}, data interface{}) (err error) { + err = mapstructure.Decode(m, &data) + return +} + +// MapToStruct +/** + * @Description: Map转Struct + * @param m + * @param data + * @return err + */ +func MapToStruct(m map[string]interface{}, data interface{}) (err error) { + // 序列化 + arr, err := json.Marshal(m) + if err != nil { + return + } + // 反序列化 + err2 := json.Unmarshal(arr, &data) + if err2 != nil { + return + } + return +} + +// StructToMap +/** + * @Description: Struct转Map + * @param obj + * @return map[string]interface{} + */ +func StructToMap(obj interface{}) map[string]interface{} { + types := reflect.TypeOf(obj) + values := reflect.ValueOf(obj) + var data = make(map[string]interface{}) + for i := 0; i < types.NumField(); i++ { + data[types.Field(i).Name] = values.Field(i).Interface() + } + return data +} diff --git a/utils/random/rand.go b/utils/random/rand.go new file mode 100644 index 0000000000000000000000000000000000000000..2882e675d336b8a85ae79661e86115477db8023d --- /dev/null +++ b/utils/random/rand.go @@ -0,0 +1,127 @@ +/** + * @Time :2022/3/29 9:08 + * @Author :ZhangXiaoyu + */ + +package random + +import ( + "fmt" + "math/rand" + "strings" + "sync" + "time" +) + +const ( + // CAPITAL 包含大写字母 + CAPITAL = 1 + // LOWERCASE 包含小写字母 + LOWERCASE = 2 + // SPECIAL 包含特殊字符 + SPECIAL = 4 + // NUMBER 包含数字 + NUMBER = 8 +) + +var ( + // 设置随机种子 + r = rand.New(rand.NewSource(time.Now().Unix())) + // 大写字母 + capital *[]int + // 小写字母 + lowercase *[]int + // 特殊符号 + special *[]int + // 数字 + number *[]int + + once sync.Once +) + +// RandInt +/** + * @Description: 随机整数 + * @param start + * @param end + * @return v + */ +func RandInt(min, max int) (v int) { + return r.Intn(max-min) + min +} + +// RandFloat +/** + * @Description: 随机小数 + * @param min + * @param max + * @return v + */ +func RandFloat(min, max float64) (v float64) { + return min + r.Float64()*(max-min) +} + +// initASCII +/** + * @Description: 初始化ASCII码列表 + */ +func initASCII() { + once.Do(func() { + fmt.Println("初始化列表") + // 大写字母 + c := make([]int, 26) + for i := 0; i < 26; i++ { + c[i] = 65 + i + } + // 小写字母 + capital = &c + l := make([]int, 26) + for i := 0; i < 26; i++ { + l[i] = 97 + i + } + lowercase = &l + // 数字 + n := make([]int, 10) + for i := 0; i < 10; i++ { + n[i] = 48 + i + } + number = &n + // 特殊字符(. @$!%*#_~?&^) + s := []int{46, 64, 36, 33, 37, 42, 35, 95, 126, 63, 38, 94} + special = &s + }) + return +} + +// RandString +/** + * @Description: 随机生成字符串 + * @param n 字符串长度 + * @param mode 字符串模式 random.NUMBER|random.LOWERCASE|random.SPECIAL|random.CAPITAL) + * @return str 生成的字符串 + */ +func RandString(n int, mode int) (str string) { + initASCII() + var ascii []int + if mode&CAPITAL >= CAPITAL { + ascii = append(ascii, *capital...) + } + if mode&LOWERCASE >= LOWERCASE { + ascii = append(ascii, *lowercase...) + } + if mode&SPECIAL >= SPECIAL { + ascii = append(ascii, *special...) + } + if mode&NUMBER >= NUMBER { + ascii = append(ascii, *number...) + } + if len(ascii) == 0 { + return + } + var build strings.Builder + for i := 0; i < n; i++ { + build.WriteString(string(rune(ascii[r.Intn(len(ascii))]))) + } + str = build.String() + return +}