Echo官網(wǎng)地址:https://labstack.com/echo
Echo是PhalGo最核心的組件,負(fù)責(zé)了整體的請(qǐng)求路由返回等功能,并且Echo支持HTTP2協(xié)議以及HTTPS協(xié)議
在初期筆者考慮過Echo,gin以及beego來嘗試實(shí)現(xiàn)自己的項(xiàng)目,最終還是選擇了使用Echo來作為PhalGo的主要路由框架
讓我決定的因素是應(yīng)為Echo支持使用fasthttp所以在效率上面基本其他框架沒法比(筆者是個(gè)性能狗),我們可以看一下Echo官方的性能圖
機(jī)器配置:
gin相對(duì)來說更人性化一些beego相對(duì)更簡(jiǎn)單易用一些感興趣的可以嘗試一下
在PhalGo中所有的組件需要使用都需要在入口進(jìn)行注冊(cè)
//初始化ECHO路由
phalgo.NewEcho()
然后就可以注冊(cè)我們的路由了,建議在項(xiàng)目建立一個(gè)routes目錄中存放路由go文件然后在入口文件中引入
// Routes 載入路由
routes.GetRoutes()
Echo支持restful標(biāo)準(zhǔn)
phalgo.Echo.Get() //接受Get請(qǐng)求
phalgo.Echo.Post() //接受Post請(qǐng)求
phalgo.Echo.Delete() //接受Delete請(qǐng)求
phalgo.Echo.Put() //接受Put請(qǐng)求
phalgo.Echo.Any() //接受所有請(qǐng)求方式
以上所有方式都需要接受兩個(gè)參數(shù),第一個(gè)是請(qǐng)求的路徑比如填入"/test/:id",就需要使用localhost/test/5這種方式請(qǐng)求,第二個(gè)參數(shù)必須是一個(gè)方法func(Context) error例子如下
func hello(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
}
//接收Get請(qǐng)求
e.GET("/test/:id",hello)
開啟服務(wù)有兩種方式一種是默認(rèn)的Standard方式一種是Fasthttp,看過上面的對(duì)比圖也應(yīng)該之道Fasthttp有多強(qiáng)了把,我們可以在入口文件最后加入如下語句開啟服務(wù)
//使用Fasthttp方式
phalgo.RunFasthttp(":1333")
//使用Standard方式
phalgo.RunStandard(":1333")
這樣就可以運(yùn)行一個(gè)http服務(wù)了
Echo有很多好用的中間件,筆者在這里進(jìn)行了封裝,這里簡(jiǎn)單提及幾個(gè)以及他們的功能,使用方式只需要在開啟服務(wù)之前初始化即可
1.Recover
使用Recover會(huì)打印出打印請(qǐng)求異常信息
phalgo.Recover()
比如訪問一個(gè)未注冊(cè)路由的地址,頁(yè)面上會(huì)打印Not Found,終端上會(huì)打印如下語句:
{"time":"2016-05-24T17:02:12+08:00","level":"ERROR","prefix":"echo","file":"echo.go","line":"226","message":"Not Found"}
2.Logger
使用Logger會(huì)打印出所有的請(qǐng)求明細(xì),請(qǐng)求IP請(qǐng)求方式,請(qǐng)求花費(fèi)時(shí)間請(qǐng)求地址,請(qǐng)求httpcode等等,方便調(diào)試
請(qǐng)求成功:
{"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}
請(qǐng)求失敗:
{"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壓縮
在很多時(shí)候我們需要開啟Gzip壓縮來減少返回?cái)?shù)據(jù)的大小來節(jié)約流量可以通過以下方式設(shè)置:
phalgo.Gzip()
4.末尾斜杠處理
在匹配路由的時(shí)候有一個(gè)問題比如我們定義了一個(gè)路由是/test我們通過localhost/test/是請(qǐng)求不到應(yīng)為末尾多了一個(gè)斜杠,這個(gè)時(shí)候就可以通過中間件的末尾斜杠處理來添加末尾斜杠或者是刪除末尾斜杠
//自動(dòng)添加末尾斜杠
phalgo.AddTrailingSlash()
//自動(dòng)刪除末尾斜杠
phalgo.RemoveTrailingSlash()
更多建議: