feat: 相关操作升级为泛型实现

This commit is contained in:
2025-10-13 17:05:00 +08:00
parent 80b5e4e7cc
commit 50d2d6c7bb
18 changed files with 316 additions and 1354 deletions

67
op_map/easymap.go Normal file
View File

@ -0,0 +1,67 @@
// Package op_map ...
//
// Description : wrapper ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2023-08-10 15:01
package op_map
import (
"encoding/json"
"errors"
"reflect"
"git.zhangdeman.cn/zhangdeman/serialize"
"github.com/tidwall/gjson"
)
// EasyMap ...
func EasyMap(mapData any) Map {
m, _ := EasyMapWithError(mapData)
return m
}
// EasyMapWithError 转换map并带上转换的异常
func EasyMapWithError(mapData any) (Map, error) {
if nil == mapData {
return map[string]any{}, nil
}
reflectType := reflect.TypeOf(mapData)
if reflectType.Kind() != reflect.Map {
mapFormatData := make(map[string]any)
if err := serialize.JSON.UnmarshalWithNumber(serialize.JSON.MarshalForByteIgnoreError(mapData), &mapFormatData); nil != err {
return mapFormatData, errors.New("input data type is " + reflectType.String() + ", can not convert to map")
}
return mapFormatData, nil
}
m := Map(map[string]any{})
reflectValue := reflect.ValueOf(mapData).MapRange()
for reflectValue.Next() {
// 循环提取相关值
_ = m.Set(reflectValue.Key().String(), reflectValue.Value().Interface())
}
return m, nil
}
// EasyMapFromStruct 从struct转map
func EasyMapFromStruct(data any) Map {
byteData, _ := json.Marshal(data)
return EasyMapFromByte(byteData)
}
// EasyMapFromString 从string转为Map
func EasyMapFromString(data string) Map {
return EasyMapFromByte([]byte(data))
}
// EasyMapFromByte 从字节数组转为Map
func EasyMapFromByte(data []byte) Map {
res := Map(map[string]any{})
jsonRes := gjson.Parse(string(data))
jsonRes.ForEach(func(key, value gjson.Result) bool {
_ = res.Set(key.String(), value.Value())
return true
})
return res
}