5 Star 0 Fork 0

巨量云/juliang-go-sdk

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
StrKit.go 2.58 KB
一键复制 编辑 原始数据 按行查看 历史
不器 提交于 2023-07-31 16:23 . feat: 新增接口
package ext
import (
"fmt"
"github.com/xingcxb/goKit/core/arrayKit"
"github.com/xingcxb/goKit/core/cryptoKit"
"github.com/xingcxb/goKit/core/strKit"
"reflect"
"sort"
"strings"
)
// StructToMap 结构体转换为map
func StructToMap(t reflect.Type, v reflect.Value, params map[string]string) map[string]string {
for k := 0; k < t.NumField(); k++ {
key := t.Field(k).Name
if key == "key" {
continue
}
value := v.Field(k).String()
if value == "" {
continue
}
params[key] = value
}
return params
}
// StructTagToMap 结构体转换为map
func StructTagToMap(t reflect.Type, v reflect.Value, params map[string]string) map[string]string {
for k := 0; k < t.NumField(); k++ {
key := t.Field(k).Tag.Get("json")
if key == "key" {
continue
}
value := v.Field(k).String()
if value == "" {
continue
}
params[key] = value
}
return params
}
// GetParams 计算签名
func GetParams(object map[string]string, appKey string) map[string]string {
cleanMap := cleanParams(object)
value := arrayKit.JoinStringsInASCII(cleanMap, "&", false, false)
value = strKit.Splicing(value, "&key=", appKey)
sign := cryptoKit.Md5(value)
//fmt.Println(sign)
cleanMap["sign"] = sign
return cleanMap
}
// 格式化参数,去掉为空的参数
func cleanParams(kv map[string]string) map[string]string {
params := make(map[string]string)
for k, v := range kv {
if k == "" {
continue
}
params[k] = v
}
return params
}
// JoinStringsInASCII 按照规则,参数名ASCII码从小到大排序后拼接
// Deprecated: 使用第三方引用,废弃此方法
// data 待拼接的数据
// sep 连接符
// onlyValues 是否只包含参数值,true则不包含参数名,否则参数名和参数值均有
// includeEmpty 是否包含空值,true则包含空值,否则不包含,注意此参数不影响参数名的存在
// exceptKeys 被排除的参数名,不参与排序及拼接
func joinStringsInASCII(data map[string]string, sep string, onlyValues, includeEmpty bool, exceptKeys ...string) string {
var list []string
var keyList []string
m := make(map[string]int)
if len(exceptKeys) > 0 {
for _, except := range exceptKeys {
m[except] = 1
}
}
for k := range data {
if _, ok := m[k]; ok {
continue
}
value := data[k]
if !includeEmpty && value == "" {
continue
}
if onlyValues {
keyList = append(keyList, k)
} else {
list = append(list, fmt.Sprintf("%s=%s", k, value))
}
}
if onlyValues {
sort.Strings(keyList)
for _, v := range keyList {
list = append(list, data[v])
}
} else {
sort.Strings(list)
}
return strings.Join(list, sep)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/juliangip/juliang-go-sdk.git
git@gitee.com:juliangip/juliang-go-sdk.git
juliangip
juliang-go-sdk
juliang-go-sdk
v1.0.0

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385