go語言最快最好運用最廣的web框架比較(大多數人不瞭解的特性)

使人敬畏的Web框架

若是你爲本身設計一個小應用程序,你可能不須要一個Web框架,但若是你正在進行生產,那麼你確定須要一個,一個好的應用程序。javascript

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

這些是推進咱們使用框架的緣由,若是其餘人已經作了這些繁瑣且艱苦的工做,咱們不想本身編寫全部必要的功能。html

介紹

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

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

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

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

Buffalo:快速Web開發w/Go。web

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匹配值分別是 mespeedwheel

示例通配符:

"/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)

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

本文翻譯於 https://github.com/speedwheel/awesome-go-web-frameworks

Go Web Iris中文網:https://www.studyiris.com/

相關文章
相關標籤/搜索