【基于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
相关推荐
康小汪4 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
智能运维指南5 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
小满zs5 小时前
Go语言第十七章(反射)
后端·go
小满zs5 小时前
Go语言第十五章(JSON序列化)
后端·go
小满zs5 小时前
Go语言第十六章(自定义类型)
后端·go
金銀銅鐵6 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设6 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
白山编程大哥6 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Flynt7 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn8 小时前
bundle优化
前端