Gin教程(5)—路由参数

  1. 什么是路由参数
  2. 示例代码
  3. 详解
  4. 参数的获取

什么是路由参数

  • 路由参数是请求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)
    }
}

详解

  1. 路径规则

    • PATH可以包括三种形式:固定路径,必需通配参数“:”,和可选通配参数“*”。
    • 通配参数“*”,只能出现一次,并在PATH的最后。
    • “*”之后的内容gin会全部解析为通配参数的内容。
    • pathpath/是不同的,如果path/不存在,则会重定向到path
    • 参数类型全部按照字符串解析。
  2. 路径示例

    #合法定义
    /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    
    
  3. 其他路径

    没有定义的路径,gin默认会返回404状态码和简单的提示信息。我们可以使用:*Engine.NoRoute()指定一个自定义的404处理方法。

参数的获取

  1. 使用Context.Param(key string)方法,其中参数key是在路由规则中定义的通配参数名。
  2. 读取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

目录