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 }