httprouter 是一个高性能、可扩展的HTTP路由,上面我们列举的net/http
默认路由的不足,都被httprouter 实现,我们先用一个例子,认识下 httprouter 这个强大的 HTTP 路由。
安装:
1 |
|
在这个例子中,首先通过httprouter.New()
生成了一个*Router
路由指针,然后使用GET
方法注册一个适配/
路径的Index
函数,最后*Router
作为参数传给ListenAndServe
函数启动HTTP服务即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
httprouter 为所有的HTTP Method 提供了快捷的使用方式,只需要调用对应的方法即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
现代的API,基本上都是Restful API,httprouter提供的命名参数的支持,可以很方便的帮助我们开发Restful API。比如我们设计的API/user/flysnow
,这这样一个URL,可以查看flysnow
这个用户的信息,如果要查看其他用户的,比如zhangsan
,我们只需要访问API/user/zhangsan
即可。
URL包括两种匹配模式:/user/:name精确匹配、/user/*name匹配所有的模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Handler处理链处理不同二级域名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
httprouter提供了很方便的静态文件服务,可以把一个目录托管在服务器上,以供访问。
1 |
|
使用ServeFiles
需要注意的是,第一个参数路径,必须要以/*filepath
,因为要获取我们要访问的路径信息。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
httprouter 异常捕获,httprouter允许使用者,设置PanicHandler
用于处理HTTP请求中发生的panic。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
httprouter还有不少有用的小功能,比如对404进行处理,我们通过设置Router.NotFound
来实现,我们看看Router
这个结构体的配置,可以发现更多有用的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|