1 Star 1 Fork 1

xiaoyutab/xgotool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
key.go 1.26 KB
一键复制 编辑 原始数据 按行查看 历史
xiaoyutab 提交于 2024-06-29 13:37 . 调整xcache.Key的生成方案
package xcache
import (
"crypto/md5"
"fmt"
"sort"
"strings"
)
// 生成CacheKey下标
// 增强模式,针对多维map进行order排序、string拼接、MD5生成的方式进行保持一致
//
// args 任意类型参数,用于进行MD5加密,返回缓存下标信息
func Key(args ...any) string {
a := ""
for i := 0; i < len(args); i++ {
a += key_enh(args[i], "")
}
a = strings.TrimSpace(strings.ReplaceAll(a, "=[ ", "=["))
if len(a) < 40 {
return a
}
return fmt.Sprintf("xcache_%X", md5.Sum([]byte(a)))
}
// 根据类型进行数值映射
//
// args 待效验参数
// keys 参数名
func key_enh(args any, keys string) string {
if keys == "" {
keys = "default"
}
ret := ""
switch t := args.(type) {
case int8, int16, int32, int, int64, uint8, uint16, uint32, uint64, uint:
ret += fmt.Sprintf(" %s=%d", keys, t)
case float32, float64:
ret += fmt.Sprintf(" %s=%g", keys, t)
case string, []byte, []rune:
ret += fmt.Sprintf(" %s=%s", keys, t)
default:
ot := map[string]any{}
any2any(args, &ot)
order_sn := []string{}
for i := range ot {
order_sn = append(order_sn, i)
}
sort.Strings(order_sn)
ret += " " + keys + "=["
for i := 0; i < len(order_sn); i++ {
ret += key_enh(ot[order_sn[i]], order_sn[i])
}
ret += "]"
}
return ret
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/xiaoyutab/xgotool.git
git@gitee.com:xiaoyutab/xgotool.git
xiaoyutab
xgotool
xgotool
v0.3.51

搜索帮助