Go语言实战案例:使用Gin处理路由参数和查询参数

在 Web API 开发中,处理 路由参数(Path Parameter) 和 查询参数(Query Parameter) 是非常常见的需求。

Go 语言的 Gin 框架在这方面提供了简洁的 API,让你轻松获取和使用这些参数。

本文将通过一个完整的例子,带你掌握 Gin 中这两类参数的用法。


一、路由参数 vs 查询参数

1. 路由参数(Path Parameter)

  • • 出现在 URL 路径中

  • • 通常用于标识资源 ID

  • • 例如:

    bash 复制代码
    GET /users/123

    这里 123 就是路由参数 id。

2. 查询参数(Query Parameter)

  • • 出现在 ? 后面,以 & 分隔

  • • 用于过滤、分页等非资源唯一标识的情况

  • • 例如:

    ini 复制代码
    GET /search?keyword=gin&page=2

二、Gin 获取路由参数和查询参数

Gin 通过 :param 定义路由参数,通过 c.Param() 获取;

查询参数可以用 c.Query() 或 c.DefaultQuery() 获取。


三、示例代码

go 复制代码
package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()

    // 路由参数示例
    r.GET("/users/:id", func(c *gin.Context) {
        id := c.Param("id")
        c.JSON(http.StatusOK, gin.H{
            "user_id": id,
        })
    })

    // 查询参数示例
    r.GET("/search", func(c *gin.Context) {
        keyword := c.Query("keyword")           // 没有默认值
        page := c.DefaultQuery("page", "1")     // 默认值为 1
        c.JSON(http.StatusOK, gin.H{
            "keyword": keyword,
            "page":    page,
        })
    })

    // 组合使用
    r.GET("/articles/:category", func(c *gin.Context) {
        category := c.Param("category")
        page := c.DefaultQuery("page", "1")
        c.JSON(http.StatusOK, gin.H{
            "category": category,
            "page":     page,
        })
    })

    r.Run(":8080")
}

四、运行与测试

启动服务:

go 复制代码
go run main.go

1. 测试路由参数

bash 复制代码
curl http://localhost:8080/users/42

返回:

json 复制代码
{"user_id":"42"}

2. 测试查询参数

arduino 复制代码
curl "http://localhost:8080/search?keyword=gin&page=2"

返回:

json 复制代码
{"keyword":"gin","page":"2"}

3. 路由参数 + 查询参数

arduino 复制代码
curl "http://localhost:8080/articles/golang?page=3"

返回:

json 复制代码
{"category":"golang","page":"3"}

五、注意事项

    1. 参数类型

    Gin 获取到的参数是字符串,如果需要整数或浮点数,需要手动转换:

    css 复制代码
    pageNum, err := strconv.Atoi(c.DefaultQuery("page", "1"))
    1. 路由冲突

    如果有多个类似 /users/:id 的路由,注意避免与静态路由冲突,比如 /users/list 可能会被解析成 id=list。

    1. 默认值

    查询参数建议用 c.DefaultQuery() 设置默认值,避免出现空字符串或 nil。


六、总结

通过 Gin,我们可以非常简洁地处理:

  • • 路由参数:c.Param("name")
  • • 查询参数:c.Query("key") / c.DefaultQuery("key", "default")

在实际项目中,你可以将参数解析和验证抽取成中间件,提升代码可维护性。

相关推荐
Moment几秒前
如果你在做 RAG,可能会需要 pdf-inspector
前端·后端·面试
Wx-bishekaifayuan14 分钟前
django医院营收信息预测系统49414-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
Wx-bishekaifayuan15 分钟前
springboot会议室预约管理系统42030-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
AINative软件工程22 分钟前
LLM 输出 Guardrail 工程实践:5 层防护栏让 AI 生成的内容不会炸掉生产
后端·llm·ai编程
IT_陈寒44 分钟前
Vite热更新失效?你可能漏了这个配置项
前端·人工智能·后端
Wx-bishekaifayuan1 小时前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
云浪1 小时前
通过 Goroutine 搞懂 Go 并发与常见的 9 个坑
后端·go
Wx-bishekaifayuan1 小时前
springboot贵州旅游系统55916-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
mldong1 小时前
事务不归引擎管:ITransactionTemplate,聚合一致性的最后一块拼图
后端·架构
IT_陈寒6 小时前
Java中equals方法比了个寂寞?原来这才是正确的重写姿势
前端·人工智能·后端