前言
大家在写golang http服务的时候或许会碰到 Request
中url.Values
转换成struct
的需要。
思路
翻开net.url
查看url.Values
的定义
type Values map[string][]string
那么我是不是可以通过遍历struct
的Field
获取对应的数据类型,以及通过tag来从url.Values
中获取对应的参数?
答案是可以的,那么我们就开动吧。
先来定义一个struct
,还有一个叫param
的tag。
type User struct { UserId int `param:"user_id,100"}
字段名: UserId
url.Values中的字段名: user_id
默认值: 100
typ := val.Type() for i := 0; i < val.NumField(); i++ { kt := typ.Field(i) //获取字段类型 tag := kt.Tag.Get("param") //获取tag sv := val.Field(i) //获取字段值 uv := getVal(values, tag) //获取默认值 switch sv.Kind() { case reflect.String: .... case reflect.Bool: .... } }
好了,思路基本上是这样的,具体实现细节请参考
源码地址
性能测试
goos: linux goarch: amd64 pkg: github.com/mokeoo/go-querystruct/params 2000000000 0.00 ns/op PASS
作者:0x1024
链接:https://www.jianshu.com/p/93bfb6411489
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦