From 6aaf058364b41e270a128456275a7cd2530e9935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?MELF=E6=99=93=E5=AE=87?= Date: Wed, 13 Apr 2022 18:24:59 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=AE=9E=E7=8E=B0=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=9A=8F=E6=9C=BA=E6=95=B0=E7=AE=97=E6=B3=95=20-=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0map=EF=BC=8Cstruct=E4=BA=92=E8=BD=AC=20-=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=B8=80=E4=BA=9B=E4=B8=AD=E6=96=87=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E7=9B=B8=E5=85=B3=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/chinese/chinese.go | 37 ++++++++++ utils/mapstruct/mapstruct.go | 72 ++++++++++++++++++++ utils/random/rand.go | 127 +++++++++++++++++++++++++++++++++++ 3 files changed, 236 insertions(+) create mode 100644 utils/chinese/chinese.go create mode 100644 utils/mapstruct/mapstruct.go create mode 100644 utils/random/rand.go diff --git a/utils/chinese/chinese.go b/utils/chinese/chinese.go new file mode 100644 index 0000000..f21833c --- /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 0000000..cd15aac --- /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 0000000..2882e67 --- /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 +} -- GitLab