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

Golang六款优秀Web框架对比

发布时间:2019-10-15 08:03:27 所属栏目:移动互联 来源:云时代的运维开发
导读:Golang是一门快速增长的语言,专为构建简单、快速且可靠的软件而设计。它提供的net/http库对于HTTP协议实现非常好,基于此再构造框架会更容易,因此生态中出现了很多框架。本文将从流行度、社区支持及内建功能等角度对六款知名Go语言Web框架做对比。 六款W
副标题[/!--empirenews.page--]

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

(编辑:核心网)

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

热点阅读