// Package util... // // Description : 字符串相关的工具 // // Author : go_developer@163.com<白茶清欢> // // Date : 2021-03-09 6:00 下午 package util import ( "crypto/md5" "encoding/hex" "math/rand" "strings" "time" ) // stringOperate ... // // Author : go_developer@163.com<白茶清欢> // // Date : 15:09 2022/5/14 type stringOperate struct { } // GenRandom 获取随机长度的字符串 // // Author : go_developer@163.com<白茶清欢> // // Date : 6:01 下午 2021/3/9 func (s *stringOperate) GenRandom(source string, length uint) string { if length == 0 { return "" } if len(source) == 0 { //字符串为空,默认字符源为如下(去除易混淆的i/l): source = "0123456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNOPQRSTUVWXYZ" } strByte := []byte(source) var genStrByte = make([]byte, 0) r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < int(length); i++ { genStrByte = append(genStrByte, strByte[r.Intn(len(strByte))]) } return string(genStrByte) } // Md5 对字符串进行md5加密 // // Author : go_developer@163.com<白茶清欢> // // Date : 6:01 下午 2021/3/9 func (s *stringOperate) Md5(str string) string { h := md5.New() _, _ = h.Write([]byte(str)) return hex.EncodeToString(h.Sum(nil)) } // GenRandomMd5 生成随机md5 // // Author : go_developer@163.com<白茶清欢> // // Date : 20:11 2022/7/12 func (s *stringOperate) GenRandomMd5() string { return s.Md5(s.GenRandom("", 16)) } // SnakeCaseToCamel 蛇形字符串转换为驼峰 // // Author : go_developer@163.com<白茶清欢> // // Date : 4:58 下午 2021/10/25 func (s *stringOperate) SnakeCaseToCamel(str string) string { if len(str) == 0 { return "" } builder := strings.Builder{} index := 0 if str[0] >= 'a' && str[0] <= 'z' { builder.WriteByte(str[0] - ('a' - 'A')) index = 1 } for i := index; i < len(str); i++ { if str[i] == '_' && i+1 < len(str) { if str[i+1] >= 'a' && str[i+1] <= 'z' { builder.WriteByte(str[i+1] - ('a' - 'A')) i++ continue } } // 将ID转为大写 if str[i] == 'd' && i-1 >= 0 && (str[i-1] == 'i' || str[i-1] == 'I') && (i+1 == len(str) || i+1 < len(str) && str[i+1] == '_') { builder.WriteByte('d' - ('a' - 'A')) continue } builder.WriteByte(str[i]) } return builder.String() }