【基于GO的Web开发11】gin获取URL‑Path 路径参数

一、什么是 Path 路径参数

路径参数(也叫 URL 路径参数、占位符参数),参数直接放在 URL 路径中,使用 / 进行分割 ,不是放在?后面。

示例地址:

复制代码
http://127.0.0.1:9090/blog/2026/08
  • /blog:固定路由前缀
  • 2026:year 路径参数
  • 08:month 路径参数

适用场景:博客文章年月、用户 id、资源详情页等 REST 风格接口。

二、基础语法

1. 路由定义规则

使用 :参数名 作为占位符

Go 复制代码
r.GET("/blog/:year/:month", func(c *gin.Context) {

})

:year、:month 就是路径占位符

2. 获取路径参数

Go 复制代码
变量 := c.Param("参数名")

⚠️注意:c.Param() 获取到的值永远是 string 字符串类型,如果需要数字,要手动转换为 int。

三、完整代码示例

Go 复制代码
package main

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

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

	// 定义带路径参数的路由
	r.GET("/blog/:year/:month", func(c *gin.Context) {
		// 获取路径参数
		year := c.Param("year")
		month := c.Param("month")

		// 返回JSON响应
		c.JSON(http.StatusOK, gin.H{
			"year":  year,
			"month": month,
		})
	})

	r.Run(":9090")
}

浏览器测试访问地址

复制代码
http://127.0.0.1:9090/blog/2026/08

返回结果:

Go 复制代码
{"month":"08","year":"2026"}

四、多组路径参数(防止路由冲突)

多条带占位符的路由,固定前缀不一样就不会冲突

Go 复制代码
// 用户路由
r.GET("/user/:name/:age", func(c *gin.Context) {
	name := c.Param("name")
	age := c.Param("age")
	c.JSON(http.StatusOK, gin.H{
		"name": name,
		"age":  age,
	})
})

// 博客路由
r.GET("/blog/:year/:month", func(c *gin.Context) {
	year := c.Param("year")
	month := c.Param("month")
	c.JSON(http.StatusOK, gin.H{
		"year":  year,
		"month": month,
	})
})

路由冲突坑点: /user/:name 和 /:name 就会发生冲突,Gin 优先匹配先注册的路由。

五、路径参数核心特点 & 易错点总结

  1. 参数放在 URL 路径,由/分割,不带?
  2. 获取函数:c.Param("key")
  3. 返回值固定为字符串 string
  4. 路径参数必填,不能省略,少一段路径就直接 404
  5. 路由前缀不一样,多条带占位符路由不会冲突

六、Gin 三种传参方式对比(复习联动)

表格

参数类型 获取方法 示例 URL
Form 表单 POST 参数 c.PostForm() 表单提交 /login
Path 路径参数 c.Param() /blog/2026/08
Query 查询参数 c.Query() /info?id=1&name=zs
相关推荐
前端兰博18 分钟前
05-Redis
redis·后端
databook1 小时前
从手动检查到自动监控:一个数据质量工作流的实现
后端·python·数据分析
【JAVA】玩家1 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
excel1 小时前
研究 Vue 3 源码的收获
前端·vue.js
东风破_1 小时前
从 Neo4j 到 GraphRAG:用 Text-to-Cypher 构建图检索 RAG
人工智能·后端
谢亮_vipxieliang2 小时前
Go map与结构体的正确使用
开发语言·golang·哈希算法
microrain2 小时前
先应答,再入库:SagooIoT 接入 GB/T 32960 的四层宿主改造
物联网·golang·开源·sagooiot
可乐鸡翅yeah_3 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx3 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师3 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端