Gin 如何获取 GET 查询字符串参数?
查询字符串参数 就是 URL 中 ?
后面 #
之前的部分,比如下面的 URL,查询字符串参数特指 a=b&c=d
https://www.twle.cn/t/90561?a=b&c=d#reply0
Gin 的 Handler 提供了 c.Query()
、c.DefaultQuery()
以及 c.GetQuery()
来获取查询参数字符串。 三者的区别如下
方法 | 说明 |
---|---|
c.Query() |
获取查询参数,如果参数不存在或值为空则返回空字符串 "" |
c.DefaultQuery() |
获取查询参数,如果参数不存在或值为空则返回第二个参数做为值 |
c.GetQuery() |
类似于 c.Query() ,但同时返回第二个 bool 参数用于判断该参数到底存不存在 |
比如对于这个请求网址 GET /path?id=1234&name=Manu&value=
, 三者的获取规则如下
c.Query()
c.Query("id") // 返回 "1234" c.Query("name") // 返回 "Manu" c.Query("value") // 返回 "" c.Query("wtf") // 返回 ""
c.DefaultQuery()
c.DefaultQuery("id", "none") // 返回 "123" c.DefaultQuery("name", "unknown") // 返回 "Manu" c.DefaultQuery("value") // 返回 "" c.DefaultQuery("wtf", "none") // 返回 "none" 注意和 c.Query() 的区别
c.GetQuery()
c.GetQuery("id") // 返回 ("123",true) c.GetQuery("name") // 返回 ("Manu",true) c.GetQuery("value") // 返回 ("",true) c.GetQuery("wtf") // 返回 ("",false) 注意和 c.Query() 的区别
示例代码如下
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() // 使用现有的基础请求对象解析查询字符串参数。 // 示例 URL: /welcome?firstname=Jane&lastname=Doe router.GET("/welcome", func(c *gin.Context) { firstname := c.DefaultQuery("firstname", "Guest") lastname := c.Query("lastname") // shortcut for c.Request.URL.Query().Get("lastname") c.String(http.StatusOK, "Hello %s %s", firstname, lastname) }) router.Run(":8080") }