go語言幾個最快最好運用最廣的web框架比較


比較一下常用的golang web框架

令人敬畏的Web框架

如果你為自己設計一個小應用程序,你可能不需要一個Web框架,但如果你正在進行生產,那么你肯定需要一個,一個好的應用程序。

雖然您認為自己擁有必要的知識和經驗,但您是否願意自行編寫所有這些功能的代碼?
您是否有時間找到生產級外部包來完成這項工作? 您確定這將與您應用的其余部分保持一致嗎?

這些是推動我們使用框架的原因,如果其他人已經做了這些繁瑣且艱苦的工作,我們不想自己編寫所有必要的功能。

介紹

Go是一種快速增長的開源編程語言,旨在構建簡單,快速,可靠的軟件。 看看哪些偉大的公司使用Go來為他們的服務提供支持。

本文提供了所有必要的信息,以幫助開發人員了解有關使用Go開發Web應用程序的最佳選項的更多信息。

本文包含了最詳細的框架比較,通過從盡可能多的角度比較最知名的Web框架:流行度,支持和內置功能:

Beego:Go編程語言的開源,高性能Web框架。

Buffalo:快速Web開發w/Go。

Echo:高性能,極簡主義的Go Web框架。

Gin:用Go(Golang)編寫的HTTP Web框架。它具有類似Martini的API,具有更好的性能。

Iris:Go in the Universe中最快的Web框架。MVC功能齊全。今天擁抱未來。

Revel:Go語言的高生產力,全棧Web框架。

聲望

人氣排序(星級)

框架名稱 當前版本 Watch Stars Forks Issues Open Issues Close 框架誕生日 最近更新 作者
beego stable v1.10.0 1159 16762 3557 544 1667 2012 2018年7月31日 GMT+8 下午9:18 @astaxie
buffalo stable 0.12.6 125 3317 259 51 508 2014 2018年8月15日 GMT+8 上午5:26 @markbates
Echo stable 3.1 513 11474 1010 108 665 2015 2018年8月29日 GMT+8 上午11:49 @vishr
Gin stable v1.stable 915 20122 2377 126 805 2014 2018年9月1日 GMT+8 上午4:38 @manucorporat
Iris stable v11 569 11604 1177 10 888 2016 2018年9月2日 GMT+8 上午12:27 @kataras
Revel stable 0.19.0 546 10208 1260 63 769 2011 2018年7月13日 GMT+8 上午3:43 @robfig

學習曲線

框架名稱 示例 示例參考 實時支持
beego 49 https://beego.me/docs  
buffalo 6 https://gobuffalo.io/docs/installation slack
Echo 20 https://echo.labstack.com/cookbook/hello-world  
Gin 15 https://github.com/gin-gonic/gin/tree/master/examples gitter
Iris 92 https://github.com/kataras/iris/tree/master/_examples rocket chat
Revel 6 http://revel.github.io/examples/index.html gitter

這里的astaxie和kataras非常出色,其他框架將會有更多的例子,至少對我來說,如果我切換到一個新的框架,這是最快速掌握盡可能多的信息的最有資源的地方。 一個例子就像1000個單詞。

核心功能

排序最多,功能較少

核心功能名稱 Iris Beego Revel Echo Gin Buffalo
路由器:命名路徑參數和通配符(Router: Named Path Parameters & Wildcard*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
路由器:正則表達式(Router: Regex*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
路由器:分組(Router: Grouping*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
路由器:以上所有混合無沖突(Router: All the above Mixed Without Conflict*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
路由器:自定義HTTP錯誤(Router: Custom HTTP Errors*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
net/http100%兼容(100% compatible with net/http*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
中間件生態系統(Middleware ecosystem*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
Sinatra風格API(Sinatra-like API*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
服務器:自動HTTPS(Server: Automatic HTTPS*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
服務器:正常關機(Server: Gracefully Shutdown*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
服務器:多監聽(Server: Multi Listeners*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
完整的HTTP/2(Full HTTP/2*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 標准(standard) 標准(standard)
子域(Subdomains*) Go Web Iris中文網 次要(secondary) 次要(secondary) 次要(secondary) 次要(secondary) 次要(secondary)
會話管理(Sessions*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 次要(secondary)
Websockets Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
嵌入到應用(View (aka Templates) Embedded Into App*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
View視圖引擎 STD(View Engine: STD*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
View視圖引擎 Pug(View Engine: Pug*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
View視圖引擎 Django(View Engine: Django*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
View視圖引擎 Handlebars(View Engine: Handlebars*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
View視圖引擎 Amber(View Engine: Amber*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
數據渲染器:Markdown,JSON,JSONP,XML Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
MVC Go Web Iris中文網 Go Web Iris中文網 generator Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
緩存(Caching*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
文件服務器(File Server*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
文件服務器:嵌入到應用程序(File Server: Embedded Into App*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
響應可以在發送之前的生命周期中多次修改(Response can be Modified Many times through lifecycle before sent*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
Gzip Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 (中間件) middleware (中間件)middleware (中間件) middleware
測試框架(Testing Framework*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
Typescript Transpiler Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
在線編輯(Online Editor*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
日志系統(Logging System*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
維護和自動更新(Maintenance & Auto-Updates*) Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網 Go Web Iris中文網
性能(Performance) ★★★★★ ★★★ ★★ ★★★★★ ★★★★★ ★★★

Go中最着名的“Web框架”並不是真正的框架,這意味着:Echo,Gin和Buffalo並不是真正的(功能齊全的)Web框架但Go社區的大多數人都認為他們是。因此他們認為它們與Iris,Beego或Revel相當,因此,我們也有義務將它們納入此清單。
除了 Beego 和 Revel 之外,所有上述框架都可以適應任何中間件這是為 net/http 創建的,其中一些可以輕松地和其他人一起完成有一些黑客[甚至痛苦是這里的選擇]。

詞匯

路由:命名路徑參數和通配符(Router: Named Path Parameters & Wildcard)

當您可以將處理程序注冊到具有動態路徑的路由時。

示例命名路徑參數:

"/user/{username}" 匹配 "/user/me", "/user/speedwheel" etc

路徑參數username匹配值分別是 me 和 speedwheel

示例通配符:

"/user/{path *wildcard}" matches to "/user/some/path/here", "/user/this/is/a/dynamic/multi/level/path" etc

path 路徑參數的值分別是some/path/herethis/is/a/dynamic/multi/level/path

Iris也支持一種稱為宏的功能,可以描述為/user/{username:string}或/user/{username:int min(1)}。

路由:正則表達式(Router: Regex)

當您可以使用帶有過濾器的動態路徑向具有過濾器的路徑注冊處理程序時,應該傳遞一些處理程序以執行處理程序。

示例:

"/user/{id ^[0-9]$}" matches to "/user/42" but not to "/user/somestring"

id路徑參數的值為42。

路由:分組(Router: Grouping)

當您可以將公共邏輯或中間件/處理程序注冊到共享相同路徑前綴的特定路由組時。

示例:

myGroup := Group("/user", userAuthenticationMiddleware) myGroup.Handle("GET", "/", userHandler) myGroup.Handle("GET", "/profile", userProfileHandler) myGroup.Handle("GET", "/signup", getUserSignupForm)
  • /user
  • /user/profile
  • /user/signup

您甚至可以從組中創建子組:

myGroup.Group("/messages", optionalUserMessagesMiddleware) myGroup.Handle("GET', "/{id}", getMessageByID)
  • /user/messages/{id}

路由:以上所有混合無沖突(Router: All the above Mixed Without Conflict)

這是一個先進但有用的功能,我們許多人希望它由路由器或Web框架支持,目前只有Iris在Go世界中支持這一功能。

這意味着/{path *wildcard}/user/{username}/user/static/user/{path*wildcard}之類的東西可以在同一個路由器中注冊,它可以正確匹配而不會受到靜態路徑的沖突(/user/static)或通配符(/{path*wildcard})。

路由:自定義HTTP錯誤(Router: Custom HTTP Errors)

當您可以為“錯誤”狀態代碼注冊處理程序時。 錯誤http狀態代碼是> = 400狀態代碼,i.s Not Found 404

示例:

OnErrorCode(404, myNotFoundHandler)

上面的大多數Web框架僅支持404,405和500注冊,但像Iris,Beego和Revel這樣的功能完全支持任何狀態代碼甚至任何錯誤代碼(Iris僅支持任何錯誤)。

100% compatible with net/http (與net/http 100%兼容)

意味着你有:

  • 框架為您提供了直接訪問*http.Requesthttp.ResponseWriter的上下文。
  • 一種將net/http處理程序轉換為特定框架的Handler類型的方法。

中間件生態系統 (Middleware ecosystem)

當您不必自己用中間件包裝每個處理程序時,框架會為您提供一個完整的引擎來定義流,全局或每個路由或每組路由。 i.e Use(middleware), Done(middleware) etc.

類似 Sinatra API (Sinatra-like API)

類似於SinatraAPIRegister在運行時處理程序中用於特定HTTP方法(和路徑參數)的路由。

示例:

.Get or GET("/path", gethandler) .Post or POST("/path", postHandler) .Put or PUT("/path", putHandler) and etc.

服務器:自動HTTPS(Server: Automatic HTTPS)

當框架的服務器支持注冊和自動續訂SSL認證以管理SSL/TLS傳入連接(https)時。 最着名的自動https提供程序是letsencrypt

服務器:正常關機 (Server: Gracefully Shutdown)

按CTRL + C關閉終端應用程序時; 服務器將正常關閉,等待一些連接完成其工作(具有特定的超時)或觸發自定義事件以進行清理(即數據庫關閉)。

服務器:多監聽(Server: Multi Listeners)

當框架的服務器支持注冊自定義net.Listener或使用多個http服務器和地址提供Web應用程序時。

完整的HTTP/2(Full HTTP/2)

當框架支持帶有httpsHTTP/2和服務器推送功能時。

子域(Subdomains)

當您可以直接從Web應用程序注冊每個x,y子域的路由。

這個框架不支持這個功能,但你仍然可以通過啟動多個http服務器來實現它,這樣做的缺點是主應用程序和子域沒有連接,默認情況下不可能在它們之間共享邏輯。

會話(Sessions)

  • 支持http會話並准備在特定處理程序中使用時。
  • 一些Web框架支持后端數據庫來存儲會話,因此您可以在服務器重新啟動之間獲得持久性。Buffalo使用gorilla會話,這些會話比其他實現慢一點。

示例:

func setValue(context http_context){ s := Sessions.New(http_context) s.Set("key", "my value") } func getValue(context http_context){ s := Sessions.New(http_context) myValue := s.Get("key") } func logoutHandler(context http_context){ Sessions.Destroy(http_context) }

Wiki: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_session

套接字(WebSockets)

當框架支持websocket通信協議時。 實現是不同的。

您應該搜索他們的示例以查看適合您的內容。 我嘗試所有這些的同事告訴我,與其他API相比,Iris使用更簡單的API實現了最具特色的webosocket連接。

Wiki: https://en.wikipedia.org/wiki/WebSocket

視圖(aka模板)嵌入到應用程序中

通常,您必須將所有模板文件與Web應用程序的可執行文件並行傳輸。 嵌入到應用程序意味着框架支持與go-bindata集成,因此最終的可執行文件包含其中的模板,表示為[]byte

什么是視圖引擎?

當框架支持模板加載,自定義和構建模板功能時,可以在關鍵部件上完成。

視圖引擎:STD

當框架支持通過標准html/template解析器加載模板時。

視圖引擎:Pug

當框架支持通過Pug解析器加載模板時。

視圖引擎:Django

當框架支持通過Django解析器加載模板時。

視圖引擎:Handlebars

當框架支持通過Handlebars解析器加載模板時。

視圖引擎:Amber

當框架支持通過Amber解析器加載模板時。

渲染:Markdown,JSON,JSONP,XML(Renderer: Markdown, JSON, JSONP, XML)

當框架的上下文為您提供一種簡單的方法來輕松地發送/和自定義各種內容類型的響應。

MVC

模型 - 視圖 - 控制器(MVC)是用於在計算機上實現用戶界面的軟件架構模式。
它將給定的應用程序划分為三個相互關聯的部分。
這樣做是為了將信息的內部表示與向用戶呈現和接受信息的方式分開。
MVC設計模式將這些主要組件分離,從而實現高效的代碼重用和並行開發。

  • Iris支持完整的MVC功能,可以在運行時注冊。
  • Beego僅支持方法和模型匹配,可以在運行時注冊。
  • Revel支持方法,路徑和模型匹配,只能通過生成器(必須運行以構建Web應用程序的不同軟件)注冊。

Wiki: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

高速緩存(Caching)

Web緩存(或HTTP緩存)是用於臨時存儲(緩存)Web文檔(例如HTML頁面和圖像)的信息技術,以減少服務器滯后。
通過它的Web緩存系統文檔; 如果滿足某些條件,可以滿足后續要求。[1] Web緩存系統可以指設備或計算機程序。

Wiki: https://en.wikipedia.org/wiki/Web_cache

文件服務器(File Server)

當您可以將(物理)目錄注冊到將自動向客戶端提供此目錄文件的路由時。

文件服務器:嵌入到應用程序(File Server: Embedded Into App)

通常,您必須傳輸所有靜態文件(如資產; css,javascript文件…)以及應用程序的可執行文件。
支持此功能的框架使您有機會將所有這些數據嵌入到應用程序中,表示為[]byte,它們的響應時間也更快,因為服務器可以直接為它們提供服務,而無需在物理位置查找文件。

響應可以在發送之前的生命周期中多次修改(Response can be Modified Many times through lifecycle before sent)

目前只有Iris通過其http_context中的內置響應編寫器支持此功能。

當框架支持此功能時,您可以在發送到客戶端之前檢索或重置或修改寫入的狀態代碼,正文和標題(在基於net/http的Web框架中,默認情況下這是不可能的,因為無法檢索或更改正文和狀態代碼 書面)。

Gzip

當你在路由的處理程序中並且你可以更改響應編寫器以便使用gzip壓縮發送響應時,框架應該處理已發送的頭文件,如果發生任何錯誤,它應該將響應寫入恢復正常。
它也應該能夠檢查客戶端是否支持gzip。

gzip是一種文件格式和用於文件壓縮和解壓縮的軟件應用程序

Wiki: https://en.wikipedia.org/wiki/Gzip

測試框架(Testing Framework)

當您可以使用特定的框架庫測試HTTP時,它的工作就是幫助您輕松編寫更好的測試。

示例(目前,只有Iris支持):

func TestAPI(t *testing.T) { app := myIrisApp() tt := httptest.New(t, app) tt.GET("/admin").WithBasicAuth("name", "pass").Expect(). Status(httptest.StatusOK).Body().Equal("welcome") }

myIrisApp返回你想象中的Web應用程序,它有一個/admin的GET處理程序,受基本身份驗證保護。

上面的簡單測試檢查/admin是否以狀態OK響應,並且使用特定用戶名和密碼傳遞身份驗證,並且其正文為welcome

Typescript Transpiler

Typescript目標是成為ES6的超集,除了標准定義的所有新東西之外,還將添加一個靜態類型系統。
Typescript還有一個轉換器,它將我們的Typescript代碼(即ES6 +類型)轉換為ES5或ES3 javascript代碼,因此我們可以在今天的瀏覽器中使用它。

在線編輯(Online Editor)

在線編輯器借助在線編輯器,您可以快速輕松地在線編譯和運行代碼。

日志系統(Logging System)

自定義日志記錄系統通過提供諸如顏色編碼,格式化,日志級別分離,不同日志記錄后端等有用功能來擴展本機日志包行為。

維護和自動更新(Maintenance & Auto-Updates)

以非侵入方式通知用戶“即時”更新框架。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM