Google的Go语言(又名Golang)已成为编写网络服务和API强有力的选择。它可以编译成快速运行的原生代码,天生支持异步编程,还拥有广泛和不断扩大的用户群 下面列出了网络开发中用到的Go语言的主要框架。一些框架旨在简化用户的使用,如API访问点等。还有一些主要是为了处理全面的网站开发,或者可以根据工作需要的组件扩张或缩减开发
Go Web主流框架
框架 | 地址 | 描述 |
---|---|---|
Gin | https://github.com/gin-gonic/gin https://gin-gonic.github.io/gin |
Go 语言编写的 Web 框架,以更好的性能实现类似 Martini 框架的 API |
Beego | https://github.com/astaxie/beego https://beego.me |
开源的高性能 Go 语言 Web 框架 |
Iris | https://github.com/kataras/iris https://iris-go.com/start/ https://www.studyiris.com/ |
全宇宙最快的 Go 语言 Web 框架。完备 MVC 支持,未来尽在掌握 |
Echo | https://github.com/labstack/echo https://echo.labstack.com |
简约的高性能 Go 语言 Web 框架 |
Revel | https://github.com/revel/revel https://revel.github.io |
Go 语言的高效、全栈 Web 框架 |
Buffalo | https://github.com/gobuffalo/buffalo https://gobuffalo.io |
使用 Go 语言快速构建 Web 应用 |
Popularity 人气
Name | Stars | Forks | Issues Open | Issues Closed | Birth Year | Author |
---|---|---|---|---|---|---|
Gin | 40,181 | 4,735 | 243 | 1184 | 2014 | @manucorporat |
Beego | 24,612 | 4,984 | 741 | 2021 | 2012 | @astaxie |
Iris | 18,565 | 2,106 | 23 | 569 | 2016 | @kataras |
Echo | 17,861 | 1,641 | 30 | 1000 | 2015 | @vishr |
Revel | 11,823 | 1,402 | 77 | 806 | 2011 | @revel |
Buffalo | 5,835 | 450 | 63 | 599 | 2014 | @markbates |
学习曲线
Name | Examples | Reference | Real time support |
---|---|---|---|
Iris | 92 | https://github.com/kataras/iris/tree/master | rocket chat |
Beego | 49 | https://beego.me/docs | |
Echo | 20 | https://echo.labstack.com/cookbook/hello-world | |
Gin | 15 | https://github.com/gin-gonic/gin#installation | gitter |
Revel | 6 | http://revel.github.io/examples/index.html | gitter |
Buffalo | 6 | https://gobuffalo.io/docs/installation | slack |
核心功能
按功能从高到低排序
Name | Iris | Beego | Revel | Echo | Gin | Buffalo |
---|---|---|---|---|---|---|
Router: Named Path Parameters & Wildcard* | - | |||||
Router: Regex* | - | |||||
Router: Grouping* | ❔ | ❔ | - | |||
Router: All the above Mixed Without Conflict* | ||||||
Router: Custom HTTP Errors* | ||||||
100% compatible with net/http* | ❔ | |||||
Middleware ecosystem* | ||||||
Sinatra-like API* | ||||||
Server: Automatic HTTPS* | ❔ | |||||
Server: Gracefully Shutdown* | ||||||
Server: Multi Listeners* | ||||||
Full HTTP/2* | ❔ | ❔ | standard | standard | ||
Subdomains* | secondary | secondary | secondary | secondary | secondary | |
Sessions* | secondary | |||||
Websockets* | ||||||
View (aka Templates) Embedded Into App* | ||||||
View Engine: STD* | ||||||
View Engine: Pug* | ||||||
View Engine: Django* | ||||||
View Engine: Handlebars* | ||||||
View Engine: Amber* | ||||||
Renderer: Markdown, JSON, JSONP, XML…* | ||||||
MVC* | - | generator | ||||
Caching* | ||||||
File Server* | ||||||
File Server: Embedded Into App* | ||||||
Response can be Modified Many times through lifecycle before sent* | ||||||
Gzip* | middleware | middleware | middleware | |||
Testing Framework* | ||||||
Typescript Transpiler* | ||||||
Online Editor* | ||||||
Logging System* | - | - | ||||
Maintenance & Auto-Updates* | ||||||
Performance | ★★★★★ | ★★★ | ★★ | ★★★★★ | ★★★★★ | ★★★ |
Go中最著名的“Web框架”并不是真正的框架,也就是说:Echo、Gin和Bufflo不是真正的(完整功能的)Web框架。但是Go社区的大多数人认为它们是。他们认为它们可以和Iris、Beego或Revel相比较。因此,我们有义务将它们也包括在这个列表中 除了Beego和Revel之外,上述所有框架都可以适应任何为net/http创建的中间件。有些框架很容易,有些需要些编码(即使有点痛苦也是一个选择)
Gin
Go的第一个Web开发框架是Martini,但这个项目已经停止了维护。然而,其他Go框架如雨后春笋般纷纷涌现,它们使用Martini的基本思想,但是具有更好的性能和更多的功能
Gin就是其中的一个项目。它使用修改过的的httprouter软件包来提高速度,并为很多常见的场景提供处理程序,包括中间件、文件上传、日志、将前端HTML组件绑定到后台的数据结构等等。其稳定版API是1.x版本,所以未来的变更应该不会破坏现有的Gin应用
Beego
在某些方面,Beego会让人联想到Python中包罗万象的Django Web框架。它具备各种Web应用程序的通用功能,总共有八个模块,你可以根据需要选择使用。除了大多数Web框架中常见的模型-视图-控制器(model-view-controller,MVC)组件外,它还包括访问数据库的对象关系映射(object-relationship map,ORM)、内置缓存处理程序、会话处理工具、日志记录机制和常用的操作HTTP对象的库
Beego还有一个与Django很相似的地方是它的命令行工具。例如,你可以使用bee从头创建Beego应用或管理现有的应用
Iris
Iris的创建者称其为“真正属于Go的Express.js”,也就是说, 它是 Node.js 的Web框架的Go语言版,它使用最小设计,绝大部分功能都由插件提供。Iris提供基本的MVC功能,自带对中间件、会话、路由和缓存的支持
文档包含很多Iris的示例,包括与React前端的交互,或在Docker/Kubernetes环境中运行的项目
Echo
Echo是另一个小框架,主要面向API。例如,它并没有提供模板系统,所以你可以根据需要使用Go自己的html/template。但是,Echo提供了几种常常用于API的中间件模块,例如基本的认证和密钥身份验证、压缩、代理和日志记录
Echo还提供了大量实用的recipe,其中很多无需大费周折就能实现。例如,如果你想使用Let’s Encrypt来管理HTTPS证书,那么可以设置一种recipe来自动安装这些证书
Revel
Ruby on Rails为MVC风格的Web框架提供了一个通用模式,许多其他语言都仿照Ruby on Rails实现了自己的框架。Revel的创建者将其视作Rails的灵魂
除了提供基本的MVC,Revel还允许你自由使用其他组件来满足其他需求。你可以使用Go自己的原生html/template包,或自己提供。同样,对于HTTP引擎,你也可以使用Go自己的或第三方提供的。缓存可以在本地的内容中完成,也可以通过Memcached或Redis在后台完成。但是,该框架没有数据库的原生ORM。Revel文档的一个例子(https://revel.github.io/examples/booking.html)中使用了Gorp库,但理论上来说你可以使用任何Go ORM
Gorilla
Gorilla的定位是“Web工具箱”,而并非MVC风格的框架。它提供的库可以帮忙解决Web服务编程中各种底层的问题,包括context(在请求期间保存状态)、mux(路由和调度),以及实现HTTP上的安全cookie、会话、websocket和RPC等功能
Gorilla没有提供模板、表单和其他前端部分。你需要自己准备这些部分,你可以在其他框架中使用Gorilla的各个组件,或是在独立组件中集成用Gorilla编写的东西