请求参数
在 Web 开发中,GET 请求参数通常有两类:
- 路径参数(Path Parameter):参数写在 URL 路径上,例如
/user/123
- 查询参数(Query Parameter):在
? 后面的键值对,例如 /search?name=tom&age=20
路径请求参数
路径参数写在 URL 的路径结构中,而不是 ? 后。
特点:
- 用于表示资源层级关系,例如:
/user/:id
- 必须按声明的格式在 URL 中出现
- Gin 使用
:paramName 标记参数
- 使用
ctx.Param("name") 获取
示例
访问路径示例:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import ( "fmt"
"github.com/gin-gonic/gin" )
func main() { r := gin.Default() r.GET("/path/:name/:age", func(ctx *gin.Context) { name := ctx.Param("name") age := ctx.Param("age")
ctx.JSON(200, gin.H{ "message": fmt.Sprintf("you name is %s, age is %s", name, age), "name": name, "age": age, }) }) r.Run() }
|
请求示例:

查询参数
查询参数出现在 URL 的 ? 之后,例如:
1
| /query?name=ziyang&age=18
|
特点:
- 顺序不重要
- 可选(可以不传)
- 常用于过滤、搜索、分页等
2.1 获取单个 query 参数
查询并获取某个查询参数时使用 ctx.Query():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main
import ( "fmt"
"github.com/gin-gonic/gin" )
func main() { r := gin.Default()
r.GET("/query", func(ctx *gin.Context) { name := ctx.Query("name") age := ctx.Query("age")
ctx.JSON(200, gin.H{ "message": fmt.Sprintf("you name is %s, age is %s", name, age), "name": name, "age": age, }) }) r.Run() }
|
请求示例:

2.2 查询参数并设置默认值
如果参数可选,并希望有默认值,可以使用 ctx.DefaultQuery():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package main
import ( "fmt"
"github.com/gin-gonic/gin" )
func main() { r := gin.Default()
r.GET("/query2", func(ctx *gin.Context) { name := ctx.DefaultQuery("name", "defaultName") age := ctx.DefaultQuery("age", "defaultAge")
ctx.JSON(200, gin.H{ "message": fmt.Sprintf("you name is %s, age is %s", name, age), "name": name, "age": age, }) })
r.Run() }
|
请求示例:

2.3 获取所有 query 参数
使用 ctx.Request.URL.Query() 可以一次性获取全部 Query 参数,返回 url.Values map[string][]string:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import ( "fmt"
"github.com/gin-gonic/gin" )
func main() { r := gin.Default()
r.GET("/query3", func(ctx *gin.Context) { query := ctx.Request.URL.Query()
ctx.JSON(200, gin.H{ "message": fmt.Sprintf("you name is %s, age is %s", query.Get("name"), query.Get("age")), "query": query, }) })
r.Run() }
|
请求示例:
