Go语言使用Gin处理路由参数和查询参数

Written by

in

文章目录
  • 1. 路由参数(Path Parameter) 出现在 URL 路径中 通常用于标识资源 ID 例如: GET /users/123 这里 123 就是路由参数 id。 2. 查询参数(Query Parameter) 出现在 ? 后面,以 & 分隔 用于过滤、分页等非资源唯一标识的情况 例如: GET /search?keyword=gin&page=2
  • Gin 通过 :param 定义路由参数,通过 c.Param() 获取; 查询参数可以用 c.Query() 或 c.DefaultQuery() 获取。
  • 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 run main.go
  • 1. 参数类型 Gin 获取到的参数是字符串,如果需要整数或浮点数,需要手动转换: pageNum, err := strconv.Atoi(c.DefaultQuery(“page”, “1”)) 2. 路由冲突 如果有多个类似 /users/:id 的路由,注意避免与静态路由冲突,比如 /users/list 可能会被解析成 id=list。 3. 默认值 查询参数建议用 c.DefaultQuery() 设置默认值,避免出现空字符串或 nil。
  • 通过 Gin,我们可以非常简洁地处理: 路由参数:c.Param("name") 查询参数:c.Query("key") / c.DefaultQuery("key", "default") 在实际项目中,你可以将参数解析和验证抽取成中间件,提升代码可维护性。 到此这篇关于Go语言使用Gin处理路由参数和查询参数的文章就介绍到这了,更多相关Go处理路由参数和查询参数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Golang 关于Gin框架请求参数的获取方法 Go中gin框架的*gin.Context参数常见实用方法 Golang Gin框架获取请求参数的几种常见方式 Go语言Gin框架获取请求参数的两种方式 Go的gin参数校验中的validator库详解 golang gin框架获取参数的操作
  • 目录
    • 一、路由参数 vs 查询参数
    • 二、Gin 获取路由参数和查询参数
    • 三、示例代码
    • 四、运行与测试
      • 1. 测试路由参数
      • 2. 测试查询参数
      • 3. 路由参数 + 查询参数
    • 五、注意事项
      • 六、总结

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

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

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

        1. 路由参数(Path Parameter)

        出现在 URL 路径中

        通常用于标识资源 ID

        例如:

        GET /users/123
        

        这里 123 就是路由参数 id

        2. 查询参数(Query Parameter)

        出现在 ? 后面,以 & 分隔

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

        例如:

        GET /search?keyword=gin&page=2
        

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

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

        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 run main.go
        

        curl http://localhost:8080/users/42
        

        返回:

        {"user_id":"42"}
        

        curl "http://localhost:8080/search?keyword=gin&page=2"
        

        返回:

        {"keyword":"gin","page":"2"}
        

        curl "http://localhost:8080/articles/golang?page=3"
        

        返回:

        {"category":"golang","page":"3"}
        

        1. 参数类型

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

        pageNum, err := strconv.Atoi(c.DefaultQuery("page", "1"))
        

        2. 路由冲突

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

        3. 默认值

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

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

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

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

        到此这篇关于Go语言使用Gin处理路由参数和查询参数的文章就介绍到这了,更多相关Go处理路由参数和查询参数内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

        您可能感兴趣的文章:

        • Golang 关于Gin框架请求参数的获取方法
        • Go中gin框架的*gin.Context参数常见实用方法
        • Golang Gin框架获取请求参数的几种常见方式
        • Go语言Gin框架获取请求参数的两种方式
        • Go的gin参数校验中的validator库详解
        • golang gin框架获取参数的操作

        站内搜索