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框架都有哪些?GoWeb框架
- 乾貨分享:六個知名的Go語言web框架GoWeb框架
- 基於go語言gin框架的web專案骨架Go框架Web
- go Web 框架 一般得學哪款比較好呢?GoWeb框架
- 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框架
- Rust語言與Go語言各自特點概要比較 –thenewstackRustGo
- 幽默:程式語言與遊戲比較遊戲
- go gin框架和springboot框架WEB介面效能對比Go框架Spring BootWeb
- 使用Go語言web框架wego實現使用者登入功能GoWeb框架
- Go和Python比較的話,哪個比較好?GoPython
- GO 語言 Web 開發實戰一GoWeb
- Go實戰--也許最快的Go語言Web框架kataras/iris初識(basic認證、Markdown、YAML、Json)GoWeb框架YAMLJSON
- Snow——簡單易用的 Go 語言業務框架Go框架
- PPT 分享:《10 個 Go Web 開發框架對比》GoWeb框架
- Go 與 C++ 的對比和比較GoC++
- Go語言————1、初識GO語言Go
- 比Python、Java更快的 Go 語言,能否稱霸江湖?PythonJavaGo
- Go 語言體系下的微服務框架選型:Dubbo-goGo微服務框架
- Go 語言體系下的微服務框架選型: Dubbo-goGo微服務框架
- ThinkGo:一個輕量級的 Go 語言 MVC 框架GoMVC框架
- ent - 一個強大的Go語言實體框架Go框架
- 基於GO語言框架Gin開發的MVC輪子框架:GinLaravelGo框架MVCLaravel
- Go語言WEB框架:使用wego攔截器驗證使用者的登入狀態GoWeb框架
- Go語言微服務開發框架實踐-go chassis(上篇)Go微服務框架
- Go語言微服務開發框架實踐-go chassis(中篇)Go微服務框架
- Python、 JAVA這種語言比較火,是不是C語言就不行了PythonJavaC語言
- Go與C#的比較 - RedditGoC#
- Go語言的”坑“Go
- go語言的介面Go
- 比較無語的系統
- GO語言安裝air框架時遇到go: inconsistent vendoring問題GoAI框架
- go語言與c語言的相互呼叫GoC語言
- 4、BFS演算法套路框架——Go語言版演算法框架Go
- GO語言————2、GO語言環境安裝Go
- 製作 Rust 語言堪比 Mybatis 的非同步 ORM 框架RustMyBatis非同步ORM框架