go 结构体转map string类型

3 篇文章 0 订阅

反射的类型官方文档

// ToMapString 结构体转为Map[string]string
func ToMapString(in interface{}, tagName string) map[string]string {
	out := make(map[string]string)
	v := reflect.ValueOf(in)
	if v.Kind() == reflect.Ptr {
		v = v.Elem()
	}
	if v.Kind() != reflect.Struct { // 非结构体返回错误提示
		return nil
	}
	t := v.Type()
	for i := 0; i < v.NumField(); i++ { // 遍历结构体字段
		fi := t.Field(i)
		tagValue := fi.Tag.Get(tagName) //获取标签里面的值 例如`form:"page"` 则获取到form里面的值 page
		if tagValue != "" {
			switch fi.Type.String() {
			case "Int", "Int8", "Int16", "Int32", "Int64":
				out[tagValue] = fmt.Sprintf("%d", v.Field(i).Int())
			case "Float32", "Float64":
				out[tagValue] = fmt.Sprintf("%f", v.Field(i).Float())
			case "String":
				out[tagValue] = v.Field(i).String()
			case "Bool":
				out[tagValue] = fmt.Sprintf("%v", v.Field(i).Bool())
			default:
				out[tagValue] = fmt.Sprintf("%v", v.Field(i).Interface())
			}
		}
	}
	return out
}

测试实例

type SearchRequest struct {
	Page int64  `form:"page,default=1"`
	Q    string `form:"q,optional"` //可选参数
	Size int64  `form:"size,default=10"`
}
{
	name: "fuck",
	args: args{
		in: &SearchRequest{
			Page: 60,
			Q:    "133",
			Size: 1,
		},
		tagName: "form",
	},
},

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

API调用工程师-南又南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值