util/string.go

100 lines
2.3 KiB
Go
Raw Normal View History

2022-05-14 13:45:51 +08:00
// 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"
)
2022-05-14 15:11:45 +08:00
// stringOperate ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:09 2022/5/14
type stringOperate struct {
}
2022-05-14 16:26:33 +08:00
// GenRandom 获取随机长度的字符串
2022-05-14 13:45:51 +08:00
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:01 下午 2021/3/9
2022-05-14 16:26:33 +08:00
func (s *stringOperate) GenRandom(source string, length uint) string {
2022-05-14 13:45:51 +08:00
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
2022-05-14 15:11:45 +08:00
func (s *stringOperate) Md5(str string) string {
2022-05-14 13:45:51 +08:00
h := md5.New()
_, _ = h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}
2022-07-12 20:12:04 +08:00
// GenRandomMd5 生成随机md5
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:11 2022/7/12
func (s *stringOperate) GenRandomMd5() string {
return s.Md5(s.GenRandom("", 16))
}
2022-05-14 13:45:51 +08:00
// SnakeCaseToCamel 蛇形字符串转换为驼峰
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 4:58 下午 2021/10/25
2022-05-14 15:11:45 +08:00
func (s *stringOperate) SnakeCaseToCamel(str string) string {
2022-05-14 13:45:51 +08:00
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()
}