加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

Golang六款优秀Web框架对比

发布时间:2019-10-16 17:49:39 所属栏目:移动互联 来源:云时代的运维开发
导读:Golang是一门快速增添的说话,专为构建简朴、快速且靠得住的软件而计划。它提供的net/http库对付HTTP协议实现很是好,基于此再结构框架会更轻易,因今生态中呈现了许多框架。本文将从风行度、社区支持及内建成果等角度对六款知名Go说话Web框架做比拟。 六款W

类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.  } 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读