「Go工具箱」推荐一个Google开发的将结构体快速拼接成url查询参数的工具
2023-06-13 09:16:47 时间
大家好,我是渔夫子。本号新推出「go工具箱」系列,意在给大家分享使用go语言编写的、实用的、好玩的工具。
今天给大家推荐的是一个将结构体快速的构造成url查询参数的工具:go-querystring。
实现原理分析
该包通过在结构体中自定义url的tag标签,然后基于reflect反射来解析各个字段的类型和值,最终通过内置包中的url.Values实现的。
包的安装
在程序中使用import引入该包即可使用:
import "github.com/google/go-querystring/query"
包的使用
定义一个结构体,然后通过该包的Encode函数便能将其构造成url中的查询字符串:
type Options struct {
Query string `url:"q"`
ShowAll bool `url:"all"`
Page int `url:"page"`
}
opt := Options{ "foo", true, 2 }
v, _ := query.Values(opt)
// will output: "q=foo&all=true&page=2"
fmt.Print(v.Encode())
该包还支持结构体的嵌套、匿名结构体、切片、数组、指针、Time等类型的转换。
下面是一个使用切片的例子,通过在tag中增加comma标签,代表以逗号将值进行连接(实际输出时会有url的转义):
type Options struct {
Score []int `url:"score,comma"`
}
opt := Options{Score: []int{1,2,3}}
v, _ := query.Values(opt)
// will output: "score=1,2,3"
fmt.Print(v.Encode())
最后,我们再看一个使用时间类型的例子:
type Options struct {
CreatedAt time.Time `url:"created_at";layout:"2006-01-02"`
}
opt := Options{CreatedAt: time.Now()}
//will output: "created_at=2022-09-03T21:48:44+08:00
优缺点分析
该包的优点就是简单、快速。只要定义一个结构体,调用该包的Encode函数就能将结构体中的字段自动拼接成url的查询参数。当然其缺点就是性能差。下面是一个使用该包和不使用该包的基准测试结果,基本上该包的性能是go内置包的5倍还多。如下图:
更多项目详情请查看如下链接。
开源项目地址:https://github.com/google/go-querystring
开源项目作者:Google
---特别推荐---
特别推荐:一个专注go项目实战、项目中踩坑经验及避坑指南、各种好玩的go工具的公众号,「Go学堂」,专注实用性,非常值得大家关注。点击下方公众号卡片,直接关注。关注送《100个go常见的错误》pdf文档。
相关文章
- 一起看 I/O | 灵活的全新工具助力您的 Google Play 订阅业务
- 化整为零优化重用,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang函数的定义和使用EP07
- 使用WebP-Server-Go无缝转换图片为Google的webp格式让你网站访问加载速度飞起来
- 「Go工具箱」go语言csrf库的使用方式和实现原理
- google软件测试之道_gtest测试框架
- unCaptcha:一款针对Google音频验证码系统reCaptcha的安全研究工具
- 什么是 Google lighthouse 中的 Time to Interactive metrics
- 如何使用 Google Analytics 监测百度竞价排名效果
- Google Hosted Libraries:使用 Google 服务器给开源 JavaScript 库加速
- Go-包管理-go mod(二)
- Go-包管理-go clean
- Go从入门到精通(一)go语言初识详解编程语言
- Go—go-cache包学习详解编程语言
- 全世界都在薅Android的羊毛 Google为何坐视不管?
- 编程新精英:Go语言 Redis开发(go语言redis开发)
- Google Play 商店 v19.6.30 官方版
- Google 关于 Go 2 的讨论
- 环境Go 编译 在 Linux 环境中的体验(go编译linux)
- Go语言连接Oracle数据库实战(go连接oracle)
- Chrome 现重大安全漏洞,Google 已紧急修补
- 俄罗斯被发现劫持 Google/AWS/Cloudflare 等公司的互联网流量
- 有了 Mesos,Verizon 终于不用再羡慕 Google 了
- 阻击 Nest 恒温器:Google 的「巢」迎来挑战者「词」
- 便捷使用Go编程连接Redis(go连接redis)
- Go语言与Linux:全新的开发环境体验(go语言linux)
- MySQL中使用Go语言的好处(mysql中go什么)
- 使用Go语言实现Redis数据库(用go实现redis)
- 部署Go语言快速连接Oracle实现轻松部署(go连接oracle简单)
- 提升Go读取Oracle的速度(go读取oracle速度)
- 仿Google和WindowsLive的拖拽