Gin教程(5)—路由参数
什么是路由参数
路由参数是请求URL中的路径组成部分。
不包括Query部分,也就是 URL “?” 后边的内容。
假设有如下的URL:
https://mhost.com/article/id/2159?version=adf87asdfnhadfa
其中:/article/id/2159 是路由(请求PATH),其中由“/”分割的每一部分都可以当作请求参数;
其中:version=adf87asdfnhadfa 是请求的query,不是路由部分,在之后的query处理中会单独说明。
示例代码
package main
import (
"github.com/gin-gonic/gin"
"log"
"net/http"
)
var (
webEng *gin.Engine
)
func main() {
webEng = gin.Default()
//处理 带必选参数的路由
webEng.GET("/article/:searchBy", NecessaryParams)
//处理 带可选参数的路由
webEng.GET("/article/:searchBy/*condition", OptionalParams)
//处理 其他没有定义的路由
webEng.NoRoute(Others)
webEng.Run(":8080")
}
/*
处理带必选参数的路由:
/article no
/article/ no
/article/id yes
/article/id/ yes (redirecting request 301: /article/id/ --> /article/id)
*/
func NecessaryParams(c *gin.Context) {
searchBy := c.Param("searchBy")
c.String(http.StatusOK, "Necessary=> search article by %s", searchBy)
}
/*
处理带可选参数的路由:
/article/id no
/article/id/ yes
/article/id/2159 yes
/article/id/2159/other yes
*/
func OptionalParams(c *gin.Context) {
RangeParams(c.Params)
condition := c.Param("condition")
searchBy := c.Param("searchBy")
c.String(http.StatusOK, "Optional=> search article by %s = %s", searchBy, condition)
}
// 处理其他没有定义的路由,自定义404
func Others(c *gin.Context) {
c.String(http.StatusNotFound, "No handler for => %s", c.Request.RequestURI)
}
//Context.Params 是一个key-value结构的数组,自己可以单独处理
func RangeParams(p gin.Params) {
for k, v := range p {
log.Printf("\t %d : %s = %s\n", k, v.Key, v.Value)
}
}
详解
路径规则
- PATH可以包括三种形式:固定路径,必需通配参数“:”,和可选通配参数“*”。
- 通配参数“*”,只能出现一次,并在PATH的最后。
- “*”之后的内容gin会全部解析为通配参数的内容。
path
和path/
是不同的,如果path/
不存在,则会重定向到path
。- 参数类型全部按照字符串解析。
路径示例
#合法定义 /d1 /d2/:param1 /d3/:param1/:param2 /d4/:param1/:param2/ /d5/:param1/*param2 /d6/:param1/:param2/*param3 #非法定义 /d7/:param1/*param2/ /d8/:param1/*param2/param3 /d9/:param1/*param2/:param3 /d10/:param1/*param2/*param3
其他路径
没有定义的路径,gin默认会返回404状态码和简单的提示信息。我们可以使用:
*Engine.NoRoute()
指定一个自定义的404处理方法。
参数的获取
- 使用
Context.Param(key string)
方法,其中参数key是在路由规则中定义的通配参数名。 - 读取
Context.Params
获取所有的key-value数组,按照自已意愿处理。
代码下载:https://github.com/IrvinYoung/gin-lessons
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 irvin.em@live.com。
文章标题:Gin教程(5)—路由参数
文章字数:639
本文作者:dino
发布时间:2019-11-25, 14:54:41
最后更新:2019-11-25, 15:18:09
原始链接:https://blog.walkbc.com/2019/11/25/gin-lesson-pathParameters/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。
QQ交流群:273078549