提交 6aaf0583 编写于 作者: MELF晓宇's avatar MELF晓宇 🤤

- 实现部分随机数算法

- 实现map,struct互转
- 实现一些中文字符串相关的方法
上级 1e345b4f
/**
* @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])
}
/**
* @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
}
/**
* @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
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册