PhalGo-Echo路由
PhalGo-Echo路由
Echo官网地址:https://labstack.com/echo
Echo是PhalGo最核心的组件,负责了整体的请求路由返回等功能,并且Echo支持HTTP2协议以及HTTPS协议
为什么选择Echo
在初期笔者考虑过Echo,gin以及beego来尝试实现自己的项目,最终还是选择了使用Echo来作为PhalGo的主要路由框架
让我决定的因素是应为Echo支持使用fasthttp所以在效率上面基本其他框架没法比(笔者是个性能狗),我们可以看一下Echo官方的性能图
机器配置:
- Go 1.6
- wrk 4.0.0
- 2 GB, 2 Core
gin相对来说更人性化一些beego相对更简单易用一些感兴趣的可以尝试一下
注册路由
在PhalGo中所有的组件需要使用都需要在入口进行注册
//初始化ECHO路由
phalgo.NewEcho()
然后就可以注册我们的路由了,建议在项目建立一个routes目录中存放路由go文件然后在入口文件中引入
// Routes 载入路由
routes.GetRoutes()
Echo支持restful标准
phalgo.Echo.Get() //接受Get请求
phalgo.Echo.Post() //接受Post请求
phalgo.Echo.Delete() //接受Delete请求
phalgo.Echo.Put() //接受Put请求
phalgo.Echo.Any() //接受所有请求方式
以上所有方式都需要接受两个参数,第一个是请求的路径比如填入**"/test/:id",就需要使用localhost/test/5这种方式请求,第二个参数必须是一个方法func(Context) error**例子如下
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
//接收Get请求
e.GET("/test/:id",hello)
开启服务
开启服务有两种方式一种是默认的Standard方式一种是Fasthttp,看过上面的对比图也应该之道Fasthttp有多强了把,我们可以在入口文件最后加入如下语句开启服务
//使用Fasthttp方式
phalgo.RunFasthttp(":1333")
//使用Standard方式
phalgo.RunStandard(":1333")
这样就可以运行一个http服务了
中间件middleware
Echo有很多好用的中间件,笔者在这里进行了封装,这里简单提及几个以及他们的功能,使用方式只需要在开启服务之前初始化即可
1.Recover
使用Recover会打印出打印请求异常信息
phalgo.Recover()
比如访问一个未注册路由的地址,页面上会打印Not Found,终端上会打印如下语句:
{"time":"2016-05-24T17:02:12+08:00","level":"ERROR","prefix":"echo","file":"echo.go","line":"226","message":"Not Found"}
2.Logger
使用Logger会打印出所有的请求明细,请求IP请求方式,请求花费时间请求地址,请求httpcode等等,方便调试
请求成功:
{"time":"2016-05-24T17:02:12+08:00","remote_ip":"101.81.5.247","method":"GET","uri":"/","status":200, "latency":194,"latency_human":"194.251µs","rx_bytes":0,"tx_bytes":76}
请求失败:
{"time":"2016-05-24T17:02:10+08:00","remote_ip":"101.81.5.247","method":"GET","uri":"/s","status":404, "latency":79,"latency_human":"79.126µs","rx_bytes":0,"tx_bytes":9}
3.Gzip压缩
在很多时候我们需要开启Gzip压缩来减少返回数据的大小来节约流量可以通过以下方式设置:
phalgo.Gzip()
4.末尾斜杠处理
在匹配路由的时候有一个问题比如我们定义了一个路由是**/test我们通过localhost/test/**是请求不到应为末尾多了一个斜杠,这个时候就可以通过中间件的末尾斜杠处理来添加末尾斜杠或者是删除末尾斜杠
//自动添加末尾斜杠
phalgo.AddTrailingSlash()
//自动删除末尾斜杠
phalgo.RemoveTrailingSlash()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- html+css实现彩色渐变滑动条
- 项目实战 01:将唐诗三百首写入 Elasticsearch 会发生什么?
- 装饰器和代理模式的区别,从一碗小米粥谈起
- EasyNVR部署在centos虚拟机上出现无法访问情况,该如何排查?
- RTSP协议网页无插件直播平台EasyNVR视频广场无法搜索纯数字关键词的通道,该如何解决的?
- RTSP协议网页无插件直播平台EasyNVR通道管理搜索纯数字关键词,返回结果为空如何解决?
- Mysql如何选择唯一索引和普通索引
- Python自学成才之路 多线程开发
- Mysql为什么会抖一下呢
- Python自学成才之路 线程间协作 lock,condition,event的使用
- Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)
- python自学成才之路 线程间协作之Semaphore,threading.local()
- jenkins基础
- Java 语言基础 (类和对象, 方法和封装, static 关键字和继承, 多态和特殊类)
- 安防视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列:设备录像流数据进行PS包分割