Gin - 获取 GET 请求参数

请求参数

在 Web 开发中,GET 请求参数通常有两类:

  1. 路径参数(Path Parameter):参数写在 URL 路径上,例如 /user/123
  2. 查询参数(Query Parameter):在 ? 后面的键值对,例如 /search?name=tom&age=20

路径请求参数

路径参数写在 URL 的路径结构中,而不是 ? 后。

特点:

  • 用于表示资源层级关系,例如:/user/:id
  • 必须按声明的格式在 URL 中出现
  • Gin 使用 :paramName 标记参数
  • 使用 ctx.Param("name") 获取

示例

访问路径示例:

1
/path/ziyang/18

代码:

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()
}

请求示例:

Gin - 获取 GET 请求参数

查询参数

查询参数出现在 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()
}

请求示例:

Gin - 获取 GET 请求参数

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()
}

请求示例:

Gin - 获取 GET 请求参数

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()
}

请求示例:

Gin - 获取 GET 请求参数


Gin - 获取 GET 请求参数
https://blog.pangcy.cn/2025/11/20/后端编程相关/go/gin/Gin - 获取 GET 请求参数/
作者
子洋
发布于
2025年11月20日
许可协议