64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package common
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"encoding/hex"
|
|
"reflect"
|
|
"strings"
|
|
)
|
|
|
|
func GetMD5Hash(input string) string {
|
|
hash := md5.Sum([]byte(input))
|
|
return hex.EncodeToString(hash[:])
|
|
}
|
|
|
|
// toMap 将结构体转换为map[string]interface{}
|
|
// StructToMap 将一个struct转换为map[string]interface{}
|
|
func StructToMap(obj interface{}) map[string]interface{} {
|
|
// 获取obj的类型
|
|
val := reflect.ValueOf(obj)
|
|
if val.Kind() == reflect.Ptr {
|
|
val = val.Elem()
|
|
}
|
|
|
|
// 确保obj是一个struct
|
|
if val.Kind() != reflect.Struct {
|
|
return nil
|
|
}
|
|
|
|
// 创建一个map来保存结果
|
|
data := make(map[string]interface{})
|
|
|
|
// 遍历struct的字段
|
|
for i := 0; i < val.NumField(); i++ {
|
|
// 获取字段的类型和值
|
|
valueField := val.Field(i)
|
|
typeField := val.Type().Field(i)
|
|
jsonTag := typeField.Tag.Get("json")
|
|
if idx := strings.Index(jsonTag, ","); idx != -1 {
|
|
// 如果有逗号,则取逗号之前的部分
|
|
jsonTag = jsonTag[:idx]
|
|
}
|
|
// 忽略未导出的字段(字段名首字母小写)
|
|
if !typeField.IsExported() {
|
|
continue
|
|
}
|
|
|
|
// 将字段名和值添加到map中
|
|
data[jsonTag] = valueField.Interface()
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
// mergeMaps 合并任意数量的map
|
|
func MergeMaps(maps ...map[string]interface{}) map[string]interface{} {
|
|
merged := make(map[string]interface{})
|
|
for _, m := range maps {
|
|
for k, v := range m {
|
|
merged[k] = v
|
|
}
|
|
}
|
|
return merged
|
|
}
|