Golang url.Values转换struct

前言

大家在写golang http服务的时候或许会碰到 Requesturl.Values 转换成 struct 的需要。

思路

翻开 net.url 查看 url.Values 的定义

type Values map[string][]string

那么我是不是可以通过遍历 structField 获取对应的数据类型,以及通过tag来从 url.Values 中获取对应的参数?

答案是可以的,那么我们就开动吧。

先来定义一个 struct ,还有一个叫 param 的tag。

type User struct {
     UserId int  `param:"user_id,100"
}

struct说明

字段名:  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/youkale/go-querystruct/params
2000000000           0.00 ns/op
PASS

最后

好了,思路基本上是这样的,具体实现细节请参考

GitHub源码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,908评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,914评论 0 15
  • 最美的不是相遇,而是重逢。 毕竟我们只有一辈子,错过真的好难过。 还记得吗?2017年6月7日,薛之谦上海演唱会。...
    霷揚阅读 11,765评论 0 102
  • 没有人是一座孤岛, 在茫茫里自成一体; 每个人都是大陆里一片, 亦是沧海里一汪。 若海水将土地冲走一块, 欧洲大陆...
    yuhi阅读 1,658评论 0 0