【基于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
相关推荐
TechLee7 小时前
一行代码防水平越权:用 PHP-Casbin 终结业务里的数据级 if-else
后端·php
步行cgn7 小时前
Spring 底层如何创建对象:反射机制与实例化策略
java·后端·spring
Lyra_Infra7 小时前
从 MySQL 到达梦:一次信创隔离环境里的数据库迁移踩坑实录
数据库·后端·mysql
程序员天天困7 小时前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
大数据·后端·kafka
志尊宝7 小时前
Vue3 零基础每日笔记(024):组件的创建与使用——从 import 到自动导入
前端·vue.js·笔记·前端框架·html5
@PHARAOH7 小时前
WHAT - 从前端组件化思维到后端架构设计入门
前端·微服务·架构
明月_清风7 小时前
用自然语言控制 Blender:开源项目 Blender MCP 深度介绍
人工智能·后端
是立不是利8 小时前
大文件导致请求被拒的连锁反应
开发语言·前端·javascript
志尊宝8 小时前
Vue3 零基础每日笔记(026):emit 子传父——defineEmits 与事件校验
前端·javascript·html·vue3
JaguarJack8 小时前
Whim 是什么?一门把 PHP 被否决的设想真跑起来的实验语言
后端·php·服务端