1 框架背景
1.1 Revel
Revel是Google官方发布的一款go语言web框架,其具有热编译,高性能,无状态,模块化等特性,非常适合做web开发。在GitHub上有10.7k颗star,124个贡献者。

1.2 Beego
beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。典型的MVC架构。

Beego是由国人谢孟军设计的一款go语言web框架,在GitHub上有18.7k颗star,281个贡献者。

2 框架特性
2.1 Revel
热编译--编辑,保存,和刷新时,Revel自动编译代码和模板,如果代码编译错误,会给出一个错误提示,同时捕捉运行期错误。

全栈功能-- Revel支持:路由, 参数解析, 验证, session/flash, 模板, 缓存, 计划任务, 测试, 国际化 等功能。

高性能-- Revel 基于 Go HTTP server 构建。这是techempower发布的 最新评测结果 。在各种不同的场景下进行了多达三到十次的请求负载测试。

2.2 Beego
简单化-- RESTful 支持、MVC 模型,可以使用 bee 工具快速地开发应用,包括监控代码修改进行热编译、自动化测试代码以及自动化打包部署。

智能化--支持智能路由、智能监控,可以监控 QPS、内存消耗、CPU 使用,以及 goroutine 的运行状况,让您的线上应用尽在掌握。

模块化-- beego 内置了强大的模块,包括 Session、缓存操作、日志记录、配置解析、性能监控、上下文操作、ORM 模块、请求模拟等强大的模块,足以支撑你任何的应用。

高性能-- beego 采用了 Go 原生的 http 包来处理请求,goroutine 的并发效率足以应付大流量的 Web 应用和 API 应用,目前已经应用于大量高并发的产品中。

3请求流程
3.1 Revel


Revel 暴漏一个单独的 http.Handler, 负责实例化控制器 (请求的上下文),并沿着过滤器链传递请求。

Filters 链接到一个请求处理链,由水平相关的功能组成,比如请求记录,cookie策略,授权等。大部分内建功能都是由过滤器实现的。

Actions 是处理用户输入和产生请求结果的的函数。

3.2 Beego


 

4 模板系统
4.1 Revel
Revel 使用 Go 模板, 在下面两个目录中查找模板:

1 应用程序的 views 目录 (包括所有的子目录)

2 Revel的 templates 目录.

比如有一个控制器 Hello,方法名为World, Revel会查找名字为 views/Hello/World.html的模板。模板名字不区分大小写,所以 views/hello/world.html 与 views/HeLlO/wOrLd.HtMl都是匹配的模板.

Revel 提供了错误页面模板 (在开发模式中友好的显示编译错误), 开发者也可以重写这些模板,比如 app/views/errors/500.html.

示例:

创建一个页头文件和一个页脚文件,中间的模块都可以通过{{template “xxx” .}}将header文件和footer文件导入。

4.2 Beego
beego 的模板处理引擎同样采用的是 Go 内置的 html/template 包进行处理,而且 beego 的模板处理逻辑是采用了缓存编译方式,也就是所有的模板会在 beego 应用启动的时候全部编译然后缓存在 map 里面。

beego 中默认的模板目录是 views,用户可以把模板文件放到该目录下,beego 会自动在该目录下的所有模板文件进行解析并缓存,开发模式下每次都会重新解析,不做缓存。

用户无需手动的调用渲染输出模板,beego 会自动的在调用完相应的 method 方法之后调用 Render 函数。

go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号。

使用 . 来访问当前位置的上下文

使用 $ 来引用当前模板根级的上下文

使用 $var 来访问创建的变量

[more]

4个人感受
4.1 Revel
Revel由于是Google开发的框架,通过命令安装比较慢而且很多包下载不下来,需要从其他渠道下载。比如websocket包,缺少这个包无法创建项目。项目需要的包我都是从这个网站下载。https://gopm.io/download,导入需要的包的路径,下载之后放到相应的位置。同时Revel创建项目也比较慢。创建一个项目大概需要二三十秒。

Revel的项目结构清晰,代码也比较简单易懂。

4.2 Beego
Beego由于是国人开发,安装很快,创建项目也很快。不过里面好像也缺少websocket包。但不影响创建项目。

整体项目结构清晰,但是代码比较复杂,不容易看懂。官方文档详细。