go語言另外兩個知名框架的比較

字號+ 編輯: IT男在阿里 修訂: 种花家 來源: 曾志海 2023-11-01 我要說兩句(2)

根據追麾推薦的文章, 特此轉載, 以饗各位go語言愛好者。

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

  • 沒用

    1

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評
1 樓 IP 117.174.***.25 的嘉賓 说道 : 很久前
实在不行用php的workerman和webman的协程也很快的!实测webman的速度比gin都快一倍

2 樓 IP 45.66.***.105 的嘉賓 说道 : 很久前
楼上的兄弟你是不是对协程有什么误解? 还是卖课的? 真无语, 一个php的异步网络库吹到天上去了