Go語言的Web框架比較
推薦使用net/http作為入門起步的標準庫,如果你需要路由方面功能,可使用Gorilla和Gocraft/web,Revel 和 Martini有太多的依賴注入和其他魔術讓人感覺舒服,Gorilla是最小的。
所有的Web框架都是基於net/http包構建的。
路由功能比較
路由是一種將Web請求對映到一個處理器函式的機制,路由是這些框架的基本功能,Gorilla似乎是最靈活的,但是它們基本上不相上下,一個重點是看看這個路由功能實現是否直接:
1.Revel:支援URL引數和萬用字元,舉例, "/hotels/:id" 匹配正則 "/hotels/[^/]+";而"/hotels/*id"匹配"/hotels/.+"。一個revel應用在配置檔案中指定路由。
2.Martini: 支援URL引數 萬用字元和正規表示式,舉例: "/hotels/:id" 和"/hotels/**", 路由捆綁到一個特定的HTTP方法(GET POST HEAD等)
3.Gocraft/web:支援URL引數和正規表示式,如"/hotels/:id" 和 "/hotels/:id:[0-9]+", gocraft/web花費了更多努力在將路由結構成一個tree而不是list集合,這樣能夠獲得更高效能。
4. Gorilla:支援URL引數,每個引數都可以用正則匹配,如"/hotels/{id}" 匹配正則 "/hotels/[^/]+",而 "/hotels/{id:[0-9]+}" 匹配正則 "/hotels/[0-9]+",除了基於URL的路由,Gorilla支援基於HTTP方法的路由,還有HTTP頭、URL schema、查詢引數、或任意函式,路由可透過程式指定。
資料繫結比較
資料繫結是將請求引數轉換成處理器使用的機制,下面是它們在資料繫結方面的比較:
1. Revel: 匹配引數可以使用map[string]string,也可透過引數傳給處理器方法,如"/hotels/:id"將被對映到Show(id int)方法,而id引數將自動填入,Revel的反射和注射使用非常神奇。
2.Martini: 匹配的引數也可透過 map[string]string 獲得,它將被注入到處理器的方法引數,Martini提供完整的依賴注入到處理器方法的引數,允許指定全域性或請求級別的對映,如果你喜歡依賴注入,你會覺得找到家了。
3.Gocraft/web:匹配的引數可以透過 map[string]string 獲得,不像gorilla,它提供http.ResponseWriter 和 http.Request的包裝器,引數是其欄位,欄位型別是web.Request。
4.Gorilla:匹配的引數可以透過 map[string]string 獲得。這是透過mux.Vars(request)呼叫實現的,沒有依賴注入, 沒有魔術。
控制器比較
控制器或上下文context是用於維護每個請求的狀態。
1.Revel: 控制器強概念,你的應用控制器嵌入一個*revel.Controller ,當從revel.Controller回到你的應用控制器型別時,有一點尷尬的型別斷言轉換。
2.Martini: 沒有明顯的控制器或上下文概念,但是依賴注入允許你易於建立你自己這樣的概念。
3.Gocraft/web:路由和使用者定義上下文結構聯絡,上下文結構通常由中介軟體完成。
4.Gorilla:不支援控制器和上下文,你自己實現。
中介軟體的比較
中介軟體是一個跨處理器提供通用功能的技術,比如日誌就是一箇中介軟體,注意,沒什麼神奇的基礎設施來支援中介軟體。框架並不是呼叫一個單個處理器方法,而是呼叫一系列的方法。
1. Revel:稱中介軟體為 攔截器
2. Martini:大多數功能是在中介軟體,包括第三方釋出包
3. Gocraft/web: 中介軟體是完全和一個上下文聯絡的,提供跨處理器的通用功能,比如使用者授權。
4.Gorilla: 不支援中介軟體,你自己實現
雜類比較
1.Revel:類似Rails,兩個都是最全面、最固執己見的框架。提供路由,資料繫結,驗證,會話,快取,測試框架和國際化。指定的目錄結構(比如區分單獨的“模型”,“控制器”和“意見”目錄)。見鬼,你甚至不用寫main()功能,Revel為你生成一個。
2.Martini:靈感來自Express ( Node.js web框架) 和 Sinatra (a Ruby web 框架).
3.Gocraft/web : 一個庫 不是一個框架
4.Gorilla: 由一系列獨立的庫包組成,可以取捨。
在以上分析中不傾向於任何全功能的框架。標準庫的力量可以讓我們在沒有任何上述框架情況下構建複雜的應用程式,這些框架只是選項,Gorilla是我們最喜歡的因為它是微侵入。
相關文章
- 最快的Go語言Web框架:IrisGoWeb框架
- Go語言開發的Web框架都有哪些?GoWeb框架
- 現代語言Go、Rust、Swift和Dart的比較GoRustSwiftDart
- Web開發框架比較Web框架
- 流行語言的比較 (轉)
- go Web 框架 一般得學哪款比較好呢?GoWeb框架
- 乾貨分享:六個知名的Go語言web框架GoWeb框架
- 基於go語言gin框架的web專案骨架Go框架Web
- k語言和q語言的比較
- Go語言開發的Web框架都有哪些?詳細介紹GoWeb框架
- go語言web開發框架_Iris框架講解(五)MVC包使用GoWeb框架MVC
- go語言web開發框架_Iris框架講解(六):Session的使用和控制GoWeb框架Session
- OC,swift,javascript,Dart語言比較SwiftJavaScriptDart
- 跨語言通訊方案比較
- 幽默:程式語言與遊戲比較遊戲
- Go語言筆記[實現一個Web框架實戰]——EzWeb框架(一)Go筆記Web框架
- 網上體育彩票行業的程式語言:Go與Erlang/Elixir比較行業Go
- C語言的比較庫函式--qsortC語言函式
- goweb,基於go語言的API框架GoWebAPI框架
- Rust語言與Go語言各自特點概要比較 –thenewstackRustGo
- 一個程式語言比較網站網站
- Go語言_Web_第一個Web程式GoWeb
- ABAP, Java和JavaScript三種語言的比較JavaScript
- python開發-與其他語言的比較Python
- Ruby程式語言與Ruby之間的比較
- goweb,基於go語言API框架GoWebAPI框架
- 使用Go語言web框架wego實現使用者登入功能GoWeb框架
- Event Horizon是Go語言的CQRS/ES框架Go框架
- 兩個Python web框架:Django & Tornado比較PythonWeb框架Django
- 11大類程式語言功能比較表
- Web開發框架中的架構模式比較(一) (轉)Web框架架構模式
- Web開發框架中的架構模式比較(三) (轉)Web框架架構模式
- Web開發框架中的架構模式比較(五) (轉)Web框架架構模式
- Web開發框架中的架構模式比較(四) (轉)Web框架架構模式
- GO 語言 Web 開發實戰一GoWeb
- Go和Python比較的話,哪個比較好?GoPython
- Snow——簡單易用的 Go 語言業務框架Go框架
- go gin框架和springboot框架WEB介面效能對比Go框架Spring BootWeb