1 Star 4 Fork 2

tym_hmm / go-helper

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
MapHelper.go 2.17 KB
一键复制 编辑 原始数据 按行查看 历史
天蝎儿 提交于 2022-03-26 11:35 . 增加结构转map[string]interface
package MapHelper
import (
"errors"
"fmt"
"net/url"
"reflect"
"strconv"
"strings"
)
/**
结构体转map
@param param 结构体 指针或非针
@param parseType 指定结构字属性 tag 字段 自定义
[example]
--------
type Maps struct {
Data string `map:"data"`
NumberName int `map:"number_name"`
}
mp:=Maps{
Data: "111",
NumberName: 2,
}
a,_:=MapHelper.Struct2Map(mp, "map")
fmt.Printf("%+v",a)
--------
*/
func Struct2MapNoNil(param interface{}, parseType string) (map[string]interface{}, error) {
if param == nil {
return nil, errors.New(" param interface{} can not be nil")
}
if len(strings.TrimSpace(parseType)) == 0 {
return nil, errors.New("parseType string can not be empty")
}
return Struct2Map(param, parseType), nil
}
func Struct2Map(param interface{}, parseType string) map[string]interface{} {
if param == nil {
return make(map[string]interface{})
}
if len(parseType) == 0 {
parseType = "json"
}
ValueT := reflect.ValueOf(param)
TypeT := reflect.TypeOf(param)
if TypeT.Kind() == reflect.Ptr {
TypeT = TypeT.Elem()
ValueT = ValueT.Elem()
}
fatherMap := make(map[string]interface{})
for i := 0; i < TypeT.NumField(); i++ {
typei := TypeT.Field(i).Type
if len(ValueT.Field(i).String()) > 0 {
switch typei.Kind() {
case reflect.Struct:
fatherMap[TypeT.Field(i).Tag.Get(parseType)] = Struct2Map(ValueT.Field(i).Interface(), parseType)
break
case reflect.Bool:
fatherMap[TypeT.Field(i).Tag.Get(parseType)] = ValueT.Field(i).Bool()
break
case reflect.Slice:
fatherMap[TypeT.Field(i).Tag.Get(parseType)] = ValueT.Field(i).Interface()
break
case reflect.Int:
fatherMap[TypeT.Field(i).Tag.Get(parseType)] = ValueT.Field(i).Int()
break
default:
fatherMap[TypeT.Field(i).Tag.Get(parseType)] = ValueT.Field(i).String()
}
}
}
return fatherMap
}
func MapToUrlString(dataMap map[string]interface{}) string {
if dataMap == nil {
return "'"
}
param := url.Values{}
for k, v := range dataMap {
switch v.(type) {
case int:
param.Add(k, strconv.Itoa(v.(int)))
case string:
param.Add(k, v.(string))
case float64:
param.Add(k, fmt.Sprintf("%f", v.(float64)))
}
}
return param.Encode()
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/tym_hmm/go-helper.git
git@gitee.com:tym_hmm/go-helper.git
tym_hmm
go-helper
go-helper
v1.1.52

搜索帮助

344bd9b3 5694891 D2dac590 5694891