成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Golang六款優秀Web框架對比

新聞 前端
Golang是一門快速增長的語言,專為構建簡單、快速且可靠的軟件而設計。它提供的net/http庫對于HTTP協議實現非常好,基于此再構造框架會更容易,因此生態中出現了很多框架。

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

六款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

流行度

Golang(五)最佳Web框架對比

學習曲線

Golang(五)最佳Web框架對比

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

核心功能

Golang(五)最佳Web框架對比

Web框架核心功能對比

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

詞匯解析

路由: 命名參數和通配符 支持注冊動態路徑

命名路徑參數示例

  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)}

路由: 正則表達式 支持過濾動態路徑

  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

可以從分組中再創建子分組

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

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

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

  1. OnErrorCode(404, myNotFoundHandler) 

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

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

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

中間件生態系統 框架會為你提供一個完整的引擎來定義流程、全局、單個或一組路由,而不需要自己用不同的中間件來封裝每一部分的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)

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

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

完全支持HTTP/2 框架可以很好的處理https請求的http/2協議,并支持服務器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通信協議,不同框架有不同的實現方式,其中Iris實現了websocket最多功能并提供了相對更容易使用的API

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Gzip 在一個路由的handler中,并且可以改變響應寫入器(response writer)來發送一個用 gzip 壓縮的響應時,框架會負責響應的頭部。如果發生任何錯誤,框架應該把響應重置為正常,框架也應該能夠檢查客戶端是否支持 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,檢查它的響應狀態是否為Status OK及響應體是否為welcome

TypeScript轉譯器

在線編輯器

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

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

小結

 

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


 

責任編輯:張燕妮 來源: 今日頭條
相關推薦

2012-04-02 13:22:41

Linux緩存web

2020-03-30 09:00:00

WebJava框架

2022-07-26 14:19:25

開發前端Web

2010-08-31 11:13:12

CSS框架

2023-10-22 20:20:37

FiberGo

2022-07-11 06:43:21

測試框架Java

2021-07-23 16:50:19

httpJava框架

2022-07-03 17:10:15

JavaScript編程語言開發

2022-01-04 08:14:30

Linux發行版操作系統

2019-08-29 10:58:02

Web 開發框架

2013-07-11 14:59:35

框架Android

2017-05-23 14:20:17

WebPython框架

2015-08-25 09:53:22

Web開發Python框架

2015-03-18 10:46:04

Android框架開源

2016-06-23 07:22:25

Web設計師模型工具

2013-10-24 06:51:24

2019-10-31 11:16:57

Web框架Angular

2022-11-29 07:20:30

開發框架存儲

2011-05-19 17:00:56

Web框架

2010-11-01 09:48:07

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 特黄视频 | 国产精品一区二区不卡 | 午夜精品视频在线观看 | 亚洲一区二区在线视频 | 亚洲视频免费在线看 | 黄色一级大片在线免费看产 | 日韩av一二三区 | 一区二区精品视频 | 成人免费共享视频 | 成人免费一级视频 | 欧美精品久久久 | 久久r免费视频 | 亚洲精品一区二区三区免 | 欧美一区免费 | 一区二区在线看 | 欧美综合一区二区三区 | 色爱综合网 | 亚洲 自拍 另类 欧美 丝袜 | 狠狠干夜夜草 | 日日摸夜夜爽人人添av | 国产h在线| 国产超碰人人爽人人做人人爱 | 国产成人影院 | 永久精品 | 亚洲一二三区在线观看 | 亚洲精品一区二区 | 国产精品日韩在线 | 欧美精三区欧美精三区 | 中文字幕日韩欧美一区二区三区 | 日韩精品久久久久 | 国产午夜精品久久久 | 精品在线一区二区 | 国产成人免费网站 | 草草在线观看 | 亚洲成人网在线播放 | 在线2区| 久久国产精品免费一区二区三区 | 日日夜夜av| 国产在线a | 欧美在线 | 九九亚洲|