0

0

如何在 Go 的 json-rest 框架中获取 URL 查询参数

花韻仙語

花韻仙語

发布时间:2026-01-22 11:18:11

|

131人浏览过

|

来源于php中文网

原创

如何在 Go 的 json-rest 框架中获取 URL 查询参数

本文介绍如何在基于 go-json-rest 的 rest api 中正确提取和使用 url 查询参数(如 `?hello=world`),并通过 `r.request.formvalue` 或 `r.request.url.query()` 安全读取键值对

在使用 go-json-rest 构建 RESTful 服务时,路径参数(如 /reminders/:id)可通过 r.PathParams 获取,但查询参数(即 URL 中 ? 后的部分,例如 localhost:8080/reminders?hello=world&limit=10)需通过底层 *http.Request 对象访问——因为 go-json-rest 是对标准库 net/http 的轻量封装,其 rest.Request 结构体中嵌套了原始的 *http.Request,可通过 r.Request 字段直接调用。

✅ 推荐方式:使用 r.Request.URL.Query()

这是最直观、语义最清晰的方式,专用于解析查询字符串:

Kive
Kive

一站式AI图像生成和管理平台

下载
func (i *Impl) GetAllReminders(w rest.ResponseWriter, r *rest.Request) {
    // 解析查询参数为 url.Values(map[string][]string)
    query := r.Request.URL.Query()

    // 获取单个参数值(返回第一个匹配项,若不存在则为空字符串)
    hello := query.Get("hello")        // "world"
    limitStr := query.Get("limit")     // "10"

    // 获取所有同名参数值(适用于多值场景,如 ?tag=a&tag=b)
    tags := query["tag"]               // []string{"a", "b"}

    // 示例:转换 limit 并用于分页
    var limit int = 20
    if limitStr != "" {
        if n, err := strconv.Atoi(limitStr); err == nil {
            limit = n
        }
    }

    reminders := []Reminder{}
    i.DB.Limit(limit).Find(&reminders)
    w.WriteJson(&reminders)
}
? 注意:query.Get(key) 是安全的,即使 key 不存在也返回空字符串;而 query[key] 返回 []string,需手动判空。

⚠️ 补充说明:r.Request.Form 与 r.Request.FormValue

  • r.Request.Form 在首次访问时会自动调用 ParseForm(),同时解析 GET 查询参数和 POST 表单数据(含 application/x-www-form-urlencoded)。但在纯 GET 请求中,它等价于 URL.Query()
  • r.Request.FormValue("key") 是便捷方法,内部调用 ParseForm() 后返回 Form[key] 的首个值,行为类似 URL.Query().Get(key),但隐式触发解析——对于只含查询参数的 GET 请求,推荐优先使用 URL.Query(),避免不必要的解析开销

? 不要这样做

// ❌ 错误:r.PathParams 只处理路由路径中的占位符(如 /reminders/:id),不包含查询参数
_ = r.PathParams["hello"] // 始终为 nil 或 panic

// ❌ 避免手动解析 r.Request.URL.RawQuery —— 重复造轮子且易出错

✅ 最佳实践总结

  • ✅ 使用 r.Request.URL.Query() 获取查询参数,语义明确、性能高效;
  • ✅ 用 query.Get("key") 读取单值,用 query["key"] 获取全部值;
  • ✅ 对数值型参数(如 limit, offset)务必做类型转换与错误处理;
  • ✅ 若接口需同时支持 GET 查询参数和 POST 表单提交,再考虑 FormValue;
  • ✅ 所有外部输入(包括查询参数)都应校验合法性,防止注入或越界(如 limit 应设上限)。

通过以上方式,你就能在 go-json-rest 中稳健、清晰地处理任意复杂度的查询参数逻辑。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

148

2025.11.26

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

417

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

533

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

310

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

75

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

5

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.4万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号