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

 更新时间:2025年08月14日 08:21:03   作者:程序员爱钓鱼  
在 Web API 开发中,处理 路由参数(Path Parameter)  和 查询参数(Query Parameter)  是非常常见的需求,下面我们就来看看Go语言如何使用Gin 框架处理路由参数和查询参数吧

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

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

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

一、路由参数 vs 查询参数

1. 路由参数(Path Parameter)

出现在 URL 路径中

通常用于标识资源 ID

例如:

GET /users/123

这里 123 就是路由参数 id

2. 查询参数(Query Parameter)

出现在 ? 后面,以 & 分隔

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

例如:

GET /search?keyword=gin&page=2

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

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. 测试路由参数

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

返回:

{"user_id":"42"}

2. 测试查询参数

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

返回:

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

3. 路由参数 + 查询参数

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处理路由参数和查询参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用go语言实现Redis持久化的示例代码

    使用go语言实现Redis持久化的示例代码

    redis 是一个内存数据库,如果你把进程杀掉,那么里面存储的数据都会消失,那么这篇文章就是来解决 redis 持久化的问题,本文给大家介绍了使用go语言实现Redis持久化,需要的朋友可以参考下
    2024-07-07
  • Go等待协程之WaitGroup使用与避坑指南

    Go等待协程之WaitGroup使用与避坑指南

    在Go并发编程中,goroutine非常轻量,但如何优雅地等待多个协程执行完成,才是工程实践中的关键问题,很多人第一反应是用 channel,但其实sync.WaitGroup才是更合适的工具,这篇文章不仅讲用法,还会带你深入理解WaitGroup的本质、实现机制,需要的朋友可以参考下
    2026-04-04
  • Golang并发操作中常见的读写锁详析

    Golang并发操作中常见的读写锁详析

    Golang中的锁机制主要包含互斥锁和读写锁互斥锁互斥锁是传统并发程序对共享资源进行控制访问的主要手段,这篇文章主要给大家介绍了关于Golang并发操作中常见的读写锁的相关资料,需要的朋友可以参考下
    2021-08-08
  • 使用Golang调用摄像头并进行图像处理

    使用Golang调用摄像头并进行图像处理

    近年来,摄像头成为了我们生活中不可或缺的设备之一,从智能手机到安全监控系统,无处不在的摄像头给我们带来了便利和安全,在开发摄像头相关的应用程序时,选择一种高效和易用的编程语言是非常重要的,本文将介绍如何使用Golang调用摄像头并进行图像处理
    2023-11-11
  • Golang使用Gin框架实现http分块传输

    Golang使用Gin框架实现http分块传输

    这篇文章主要为大家详细介绍了Golang中如何使用Gin框架实现http分块传输功能,文中的示例代码讲解详细,具有一定的学习价值,需要的可以参考一下
    2023-05-05
  • 详解如何使用go-acme/lego实现自动签发证书

    详解如何使用go-acme/lego实现自动签发证书

    这篇文章主要为大家详细介绍了如何使用 go-acme/lego 的客户端或库完成证书的自动签发,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 深入了解Golang中的格式化输出

    深入了解Golang中的格式化输出

    fmt是Go语言中用于控制文本输出的常用标准库,文中将通过示例详细讲解一下Go语言中不同形式的格式化输出,感兴趣的小伙伴可以了解一下
    2022-11-11
  • go-zero熔断机制组件Breaker接口定义使用解析

    go-zero熔断机制组件Breaker接口定义使用解析

    这篇文章主要为大家介绍了go-zero熔断机制组件Breaker接口定义使用解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • go mod私有仓库配置小结

    go mod私有仓库配置小结

    Go语言私有仓库通常指的是那些不在公共仓库如GitHub上的仓库,本文主要介绍了go mod私有仓库配置,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Go语言中log日志库的介绍

    Go语言中log日志库的介绍

    本文给大家介绍Go语言中log日志库的概念使用技巧,log包定义了Logger类型,该类型提供了一些格式化输出的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-10-10

最新评论