Web框架類型
web框架的主流,是採用輕量級的中間件式框架,把網站變成只有api的一個個小服務,其他都扔到cdn之類的地方處理。
這種方式,開發快速、拼裝能力強,要什麽就加什麽,不要的就不加,就像是樂高玩具,大受歡迎。
問題在於,這種框架有一堆,到底該選哪個。
Gin vs Echo
在golang中,這種傑出代表,有2個:gin 和 echo。
這兩個框架,在同類中,路由性能最高,超出其他框架一大截。google了一大堆英文站,也沒有找到這兩個框架的比較。於是,在我們實際使用後,提供個比較。
先說結論:
如果你代表企業,最好選擇gin,無痛開發。
如果是個人,開發個輕量服務,哪怕echo有點小問題,你也覺得沒啥,那麽,就用echo。
下面是比較:
框架成熟度
gin完勝。
gin擁有完善的調試信息,極爲方便。
這非常關鍵。調試信息不足,碰到一些問題會把自己累死。團隊項目,這個更加重要。
echo在這方面,就差一大截,第一次使用,就遇到了明明路由語法寫錯了,卻不報錯、不給結果,也沒有任何提示的情況。
路由性能
gin微弱小勝
gin的賣點,是所有web框架中,路由性能最好。
echo的賣點,是它的路由性能,比gin還好10%。
國外實際測試結果是:echo只在空路由時,性能比gin好10%。而常用的各種帶參數路由,echo其實要輸給gin約5-10%。
gin和echo的最新詳盡對比,(部分地區可能需要特殊方式訪問)傳送門地址:https://github.com/gin-gonic/gin/issues/329
路由便利、靈活性
一回事
gin的路由,採用一個叫httpRouter的玩意;echo不一定用的它,但用的是完全一樣的算法。這玩意,性能很高,但有個缺點: 不支持路由排序。
比如: 路由 Get("/name") 和 Get("/:id") ,一般來說,只要把Get("/name")放在Get("/:id")前面,就是不沖突的。路由模塊,會先嘗試匹配前面那個,沒匹配上,再去匹配後面的。
而 gin和echo的路由模塊,會認爲這兩個路由是沖突的。gin會給出提醒,不讓編譯通過;echo完全不提醒,沖突就沖突了......
由於眼睛看到的路由順序,不是實際解析的順序,會導致給路由起名、設計、日後的增加,帶來相當多的麻煩,路由沖突變得非常常見。
框架的可持續發展
兩個都不夠好。
gin的主創是2個大學生。每年寒暑假就頻繁更新,快到期末學測了,就完全不更新了。兩人不在的時候,有網友在幫忙熱情的維護,但主要是修bug、整理中間件。框架本身的發展,還是靠主創寒暑假爆發。就是這樣的框架,連csico都在用。。。
好在,gin的代碼注釋量大,易讀性高,便於其他人參與。而且包裝中間件,也超級容易。
作者本人的態度是,對於一個在github上,start達到5000+的項目,他怎麽可能會不去維護。請大家放心使用,到寒暑假了,他自然會去更新。。。
echo則是主創當前處於活躍狀態,並且樂呵呵的想要開發2.0版。由於主創活躍,它自帶了一些流行功能,比如 websocket, http2 授權。用gin的話,這些功能要自己包裝個中間件,雖然也很容易就是了。
但echo的問題在於,它既沒有足夠的調試信息,代碼也缺少注釋。作者現在是在勁頭上,等3-6個月,在路上看到個穿超短的妹子,熱情轉移了,很快就會忘記當時代碼是怎麽寫的。沒有注釋,不但別人不方便接手,自己也嬾得再去看,於是慢慢就永不再更新。
缺少注釋的開源包,大部分都有這個問題。echo最終會不會變成這個結局,我們無從得知。
總結
綜上,echo的狀態是當下主創本人活躍,框架還不太成熟,適合最輕量級服務;
gin則是整體成熟、易於調試,但可以預期,框架本身發展不會太快,除非主創大學畢業,從事和golang相關的工作。
echo的使用方式、命名,都參考了gin,兩者很接近,切換框架很容易,所以不用擔心選錯。
補充: 由於echo的路由沖突非常頻繁,而且沒有調試信息,在echo提供自動分析路由沖突之前,它不是個合理選擇。哪天它提供了,那麽它就還不錯。
2 樓 IP 45.66.***.105 的嘉賓 说道 : 很久前