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