【基于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
相关推荐
风曳丷40 分钟前
07|Instruction Hierarchy 不是安全边界
后端
掘金者阿豪41 分钟前
密码不想继续交给浏览器保存?群晖部署 Vaultwarden,搭建自己的密码库
后端
王霸天41 分钟前
GLB 文件太大怎么办?我把它从 47MB 压到 8MB,全程没碰命令行
前端·javascript·程序员
半个落月41 分钟前
Next.js 16 笔记应用实战:Redis 数据链路与组件两版拆分详解
前端·redis·next.js
高频因子挖掘机42 分钟前
Python批量获取1000只ETF 5分钟K线:从分页到吞吐量优化的QuantDash实践
后端·算法·github
YIAN42 分钟前
告别等后端!React+Vite 前端独立开发全流程:接口封装 + Mock 方案 + 状态管理
前端·react.js·vite
Rain的Java大神之路42 分钟前
SkyWalking从0-1部署成功实战
java·后端·架构
就叫飞六吧43 分钟前
Spring 动态注册与移除 Bean 科普
java·后端·spring