日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
Golang六款優(yōu)秀Web框架對比

Golang是一門快速增長的語言,專為構建簡單、快速且可靠的軟件而設計。它提供的net/http庫對于HTTP協(xié)議實現非常好,基于此再構造框架會更容易,因此生態(tài)中出現了很多框架。本文將從流行度、社區(qū)支持及內建功能等角度對六款老牌Go語言Web框架做對比。

站在用戶的角度思考問題,與客戶深入溝通,找到徐州網站設計與徐州網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站建設、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋徐州地區(qū)。

六款Web框架

Beego 面向Go編程語言的開源高性能web框架

  • https://github.com/astaxie/beego
  • https://beego.me

Buffalo 使用Go語言快速構建Web應用

  • https://github.com/gobuffalo/buffalo
  • https://gobuffalo.io

Echo 高性能、極簡Go語言Web框架

  • https://github.com/labstack/echo
  • https://echo.labstack.com

Gin Go語言編寫的HTTP Web框架,它以更好的性能實現了類似Martini的API,性能更好

  • https://github.com/gin-gonic/gin
  • https://gin-gonic.github.io/gin

Iris 全宇宙最快的Go語言Web框架,完備MVC支持,擁抱未來

  • https://github.com/kataras/iris
  • https://iris-go.com

Revel Go語言的高效、全棧Web框架

  • https://github.com/revel/revel
  • https://revel.github.io

流行度

學習曲線

astaxie 和 kataras 分別為 Beego 和 Iris 整理了許多例子供開發(fā)者參考學習

核心功能

Web框架核心功能對比

幾個老牌的Go語言Web框架(Echo、Gin和Buffalo)由于沒有完備支持所有功能,并不能算是真正意義上的Web框架,但大部分go社區(qū)認為它們是的,因此,有必要將這幾個框架也列在表格中可以和Iris、Beego、Revel做比較。以上這些框架,除了Beego和Revel之外,都可以適配任意net/http中間件,其中一部分框架可以輕松地做適配,另外一些可能就需要額外的努力

詞匯解析

路由: 命名參數和通配符 支持注冊動態(tài)路徑

命名路徑參數示例

 
 
 
  1. // 路徑參數 username 取值分別是 me,speedwheel
  2.  "/user/{username}" 匹配到 "/user/me", "/user/speedwheel" 等等

通配符示例

 
 
 
  1. // 路徑參數 path 對應的分別是 /user/some/path/here 和 /user/this/is/a/dynamic/multi/level/path
  2.  "/user/{path *wildcard}" 匹配到
  3.  "/user/some/path/here",
  4.  "/user/this/is/a/dynamic/multi/level/path" 等等

Iris也支持一個叫micros的功能,它可以被表示為 /user/{username: string} 或 /user/{username: int min(1)}

路由: 正則表達式 支持過濾動態(tài)路徑

 
 
 
  1. "/user/{id ^[0-9]$}" 匹配到 "/user/42" 但不會匹配 "/user/somestring"

路由: 分組 通過共用邏輯或中間件來處理有共同前綴的路徑組

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

可以從分組中再創(chuàng)建子分組

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

路由: 以上所有規(guī)則相結合而不產生沖突 這是一個高級且有用的功能,目前在Go語言框架方面只有Iris能支持這一功能。這意味著類似如 /{path wildcard}, /user/{username}和/user/static以及/user/{path wildcard}等路徑都可以在同一個路由中通過靜態(tài)路徑/user/static或通配符/user/{path *wildcard}來正確匹配

路由: 自定義HTTP異常 指可以自行處理請求錯誤的情況。HTTP的錯誤狀態(tài)碼>=400,例如,請求的資源不存在 NotFound 404

 
 
 
  1. OnErrorCode(404, myNotFoundHandler)

上述大多數Web框架只支持404,405及500錯誤狀態(tài)的處理,Iris能夠支持任意錯誤,Beego和Revel也能支持完備的HTTP錯誤狀態(tài)碼

100%兼容net/http包 這意味著

  • 這些框架能夠直接訪問 *http.Request 和 http.ResponseWriter 的上下文信息
  • 一種將net/http handler轉換為特定框架類型handler的方法

中間件生態(tài)系統(tǒng) 框架會為你提供一個完整的引擎來定義流程、全局、單個或一組路由,而不需要自己用不同的中間件來封裝每一部分的handlers

類Sinatra風格API 可以在運行時中注入代碼來處理特定的 HTTP 方法(以及路徑參數)

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

服務器程序: 自動啟用HTTPS 框架的服務器支持注冊及自動更新SSL證書來管理新傳入的SSL/TLS連接(https)

服務器程序: 優(yōu)雅關閉 當按下CTRL+C關閉終端應用程序時,服務器將等待(特定的超時時間)其他的連接完成相關任務或觸發(fā)一個自定義事件來做清理工作(比如: 關閉數據庫),最后優(yōu)雅的終止服務

服務器程序: 多重監(jiān)聽 框架的服務器支持自定義的net.Listener或使用多個http服務器和地址為web應用程序提供服務

完全支持HTTP/2 框架可以很好的處理https請求的http/2協(xié)議,并支持服務器push功能子域名 可以直接在Web應用中注入子域名的路徑

  • 輔助功能 意味著這個功能并不被這個框架原生支持,但是你仍舊可以通過啟用多個 http 服務器來實現。缺點在于:主程序和子域名程序之間并不是連通的,默認情況下,它們不能共享邏輯

會話(Sessions) 支持HTTP Sessions,且可以在自定義的handlers中使用sessions

  • 一些 Web 框架支持后臺數據庫來儲存 sessions,以便在服務器重啟之后仍舊能獲得持久的 sessions
  • Buffalo 使用 gorilla 的 sessions 庫,它比其他框架的實現略微慢了一點
 
 
 
  1. func setValue(context http_context){
  2.  s := Sessions.New(http_context)
  3.  s.Set("key", "my value")
  4.  }
  5.  func getValue(context http_context){
  6.  s := Sessions.New(http_context)
  7.  myValue := s.Get("key")
  8.  }
  9.  func logoutHandler(context http_context){
  10.  Sessions.Destroy(http_context)
  11.  }

Websockets 支持websocket通信協(xié)議,不同框架有不同的實現方式,其中Iris實現了websocket最多功能并提供了相對更容易使用的API

程序內嵌對視圖(模版)的支持 通常情況下,你必須根據 Web 應用的可執(zhí)行文件一一對應地轉換模版文件。內嵌到應用中意味著這個框架集成了 go-bindata ,因此在最終的可執(zhí)行文件中可以以 []byte 的形式將模版包含進來

視圖引擎 框架支持模版加載、自定義及內建模版功能,節(jié)省開發(fā)時間

視圖引擎: STD 框架支持通過標準的 html/template 解析器加載模版

視圖引擎: Pug 框架支持通過 Pug 解析器加載模版

視圖引擎: Django 框架支持通過 Django 解析器加載模版

視圖引擎: Handlebars 框架支持通過 Handlebars 解析器加載模版

視圖引擎: Amber 框架支持通過 Amber 解析器加載模版

渲染: Markdown, JSON, JSONP, XML... 框架提供一個簡單的方法來發(fā)送和自定義各種內容類型的響應

MVC Model-view-controller(MVC)模型是一種用于在計算機上實現用戶界面的軟件架構模式,它將一個應用程序分為互相關聯(lián)的三部分。這樣做的目的是為了:將信息的內部處理邏輯、信息呈現給用戶以及從用戶獲取信息三者分離。MVC 設計模式將這三個組件解耦合,從而實現高效的代碼復用和并行開發(fā)

  • Iris 支持完備的 MVC 功能, 可以在運行時中注入
  • Beego 僅支持方法和數據模型的匹配,可以在運行時中注入
  • Revel 支持方法,路徑和數據模型的匹配,只可以通過生成器注入(生成器是另外一個不同的軟件用于構建你的 Web 應用)

緩存 Web 緩存是一種用于臨時存儲(緩存)網頁文檔,如 HTML 頁面和圖像,來減緩服務器延時。一個 Web 緩存系統(tǒng)緩存網頁文檔,使得后續(xù)的請求如果滿足特定條件就可以直接得到緩存的文檔。Web 緩存系統(tǒng)既可以指設備,也可以指軟件程序

文件服務器 可以注冊一個(物理的)目錄到一個路徑,使得這個路徑下的文件可以自動地提供給客戶端

文件服務器: 內嵌入應用 通常情況下,必須將所有的靜態(tài)文件(比如assets: CSS, JavaScript 文件等)與應用程序的可執(zhí)行文件一起傳輸。支持此項功能的框架為你提供了在應用中,以 []byte 的形式,內嵌所有這些數據的機會。由于服務器可以直接使用這些數據而無需在物理位置查找文件,它們的響應速度也將更快

響應在發(fā)送前可以在整個生命周期中修改多次 當框架支持此功能時,可以在返回給客戶端之前檢索、重置或修改狀態(tài)碼、body及headers。默認情況下,在基于 net/http 的 Web 框架中這是不可能的,因為正文和狀態(tài)碼一經寫定就不能被檢索或修改。目前只有 Iris 通過 http_context 中內建的的響應寫入器(response writer)支持這個功能

Gzip 在一個路由的handler中,并且可以改變響應寫入器(response writer)來發(fā)送一個用 gzip 壓縮的響應時,框架會負責響應的頭部。如果發(fā)生任何錯誤,框架應該把響應重置為正常,框架也應該能夠檢查客戶端是否支持 gzip 壓縮gzip 是用于壓縮和解壓縮的文件格式和軟件程序

測試框架 可以使用框架特定的庫,來幫助你輕松地編寫更好的測試代碼來測試你的 HTTP,如下示例(目前只有Iris支持該功能)

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

myIrisApp返回虛構的Web應用,它有一個針對/admin路徑的GET方法,及基本的身份驗證邏輯保護。上面的簡單測試用例,用name和pass通過身份驗證并訪問GET /admin,檢查它的響應狀態(tài)是否為Status OK及響應體是否為welcome

TypeScript轉譯器

在線編輯器

日志系統(tǒng) 自定義日志系統(tǒng)通過提供有用的功能,如日志輸出、格式化、日志級別分離及不同的日志記錄后端等,來擴展原生日志包

維護和自動更新 以非侵入的方式通知框架的用戶即時更新

小結

框架一直是敏捷開發(fā)中的利器,能讓開發(fā)者很快上手并作出應用。成長不會一蹴而就,會經歷從入門到深入,再到精通框架的過程,找到學習和應用它的價值,便不會入門就放棄了


文章標題:Golang六款優(yōu)秀Web框架對比
鏈接分享:http://www.5511xx.com/article/dhjjpij.html