注册 登录

清河洛

fiber中的路由

qingheluo2024-02-19清河洛732
fiber中的路由是通过fiber.New()创建的App实例来绑定,点击查看:请输入链接描述精准匹配App中的常规字符串路由为精准匹配 app.Get("/name", CallBack) :仅匹配网址 /name app.Get("/", CallBack) :仅匹配网址 / 命名参数使用":name"格式来定义命名参数 app.Get("/:name/:id", CallBack) 当访问/sanqian/56时,通过 c.Params("name") // sanqian c.Params("id") // 56 ...

fiber中的路由是通过fiber.New()创建的App实例来绑定,点击查看:请输入链接描述

精准匹配

App中的常规字符串路由为精准匹配

app.Get("/name", CallBack)  :仅匹配网址 /name
app.Get("/", CallBack)  :仅匹配网址 /

命名参数

使用":name"格式来定义命名参数

app.Get("/:name/:id", CallBack)
    当访问/sanqian/56时,通过
        c.Params("name")  // sanqian
        c.Params("id")    // 56
        也可以通过c.AllParams()获取map[string]string格式的所有命名参数及值

如果传入的值中有冒号(:),需要使用两个连续的反斜杠对冒号进行转义

app.Get("/:name/:id", CallBack)

fiber可以识别一些常见的特殊情况下的命名参数

app.Get("/:name/color::color", CallBack)
    两个连续的冒号,会自动将第一个冒号理解成url的一部分
    前面的 color: 会在url中进行常规字符串匹配
    后面的 :color 会作为命名参数

可选参数

在命名参数末尾添加问号(?)表示该命名参数为可选参数

app.Get("/:name/:id?", CallBack)
    如果传入了id则正常获取
    如果没有传入id则获取id时返回空字符串
    可选参数必须在最右侧

未命名参数

通过通配符星号(*)或者加号(+)表示未命名参数

星号的位置可以为空,类似于可选参数

加号的位置则必须传入值

app.Get("/:name/*/*", CallBack)
    通过星号+数字开获取指定位置的参数值
    当访问/sanqian/qing/he时
        c.Params("*1")  // qing
        c.Params("*2")  // he
    不加数字默认返回第一个
        c.Params("*")   // qing

加号的用法和星号类似,但是星号的位置可以不传值,获取时返回空字符串,但是加号的位置必须传入值

fiber仅支持星号和加号作为通配符,不支持其他的正则,因为正则匹配会极大的拖慢处理速度

命名参数的格式限定

在fiber的2.37版本中添加了对命名参数的数据类型和格式的简单限定

当解析的格式不满足时将直接返回404处理程序

:key<requirements>[?]
    其中key为命名参数,最后添加问号则表示为可选参数
    requirements为对此命名参数的限定条件
    多个约束条件使用分号隔开  :key<one;two;three...>
    因为整体是以字符串形式编写在路由函数中的,所以注意一些特殊字符必要的转义

限定数据类型
    :key<int>            必须为int
    :key<min(num)>       必须为int,且最小为num
    :key<max(num)>       必须为int,且最大为num
    :key<range(m,n)>     必须为int,且最小为m,最大为n
    :key<bool>           必须为bool,只能为true或false
    :key<float>          必须为float,直接指数格式

限定字符
    :key<alpha>          仅包含字母字符(含大小写)

限定长度
    :key<len(num)>        长度必须为12
    :key<minLen(num)>     长度最小为num
    :key<maxLen(num)>     长度最大为num

限定格式
    :key<guid>            限定为GUID格式
        GUID为一个128位(二进制)的唯一32位16进制字符串
        这32位16进制字符串使用减号(-)分割为5部分,每部分长度为:8-4-4-4-12
        如CD2C1638-1638-72D5-1638-DEADBEEF1638
    :key<datetime(2006-01-02)>  使用指定格式的日期时间字符串

    :key<regex(\d{4}-\d{2}-\d{2})>   使用正则匹配

可以使用多个限定条件,限定条件使用分号隔开,如
:id<min(1);max(999);key<maxLen(3)>
    表示id这个参数最小为1,最大为999


网址导航