Revel 教程
Go语言Web框架Revel介绍
Revel是一个Go语言的web框架,其具有热编译,高性能,无状态,模块化等特性,非常适合做web开发。这个框架源于java的 Play! Framework.清晰的MVC结构,是现在go语言Web框架中优秀的框架。
Revel框架特性
热编译
编辑, 保存, 和 刷新时,Revel自动编译代码和模板,如果代码编译错误,会给出一个 错误提示,同时捕捉 运行期错误。
全栈功能
Revel 支持: 路由, 参数解析, 验证, session/flash, 模板, 缓存, 计划任务, 测试, 国际化 等功能。
高性能
Revel 基于 Go HTTP server 构建。 这是techempower发布的 最新评测结果 。在各种不同的场景下进行了多达三到十次的请求负载测试。
框架设计
同步
Go HTTP server 对于每个请求都运行在 goroutine上。Write simple callback-free code without guilt。
无状态
Revel 提供了保持Web层无状态的可预知的扩展。例如,会话数据被存储在用户的cookie中,缓存由memcached集群提供支持。
模块化
Revel框架由被称为 过滤器 的中间件组成,它实现了几乎所有的请求处理功能。 开发者可以自由地使用自定义的过滤器,比如如自定义的路由器,用以替换Revel默认的路由过滤器。
快速开始
1、安装revel之前,先安装go环境
2、安装还需要hg和git支持
3、设置GOPATH,然后把revel下载并安装到GOPATH内
mkdir ~/gocode
cd $GOPATH
go get github.com/robfig/revel
4.编译revel命令行工具,revel自己封装了go的命令行工具,创建revel项目、打包发布基本都用这个工具,执行下面的命令
go build -o bin/revel github.com/robfig/revel/cmd
5.可以将编译出来的revel命令行工具加到$PATH变量中方便调用
export PATH="$PATH:$GOPATH/bin"
6.最后验证revel是否可以工作了
$ revel help
~
~ revel! http://robfig.github.com/revel
~
usage: revel command [arguments]
The commands are:
run run a Revel application
new create a skeleton Revel application
clean clean a Revel application's temp files
package package a Revel application (e.g. for deployment)
Use "revel help [command]" for more information.
概要说明
本节简要介绍框架的几个主要组成部分:
- 路由
- 采用简单的声明性语法。反向路由类型安全。
- 控制器
- 组织端点到控制器。提供易用的数据绑定和表单验证。
- 模板
- 使用 Go 模板支持大规模应用.
- 拦截器
- 在一个函数运行之前或之后被调用. 控制器的方法都可以被注册拦截.
- 过滤器
- 通用的功能可以使用过滤器来实现.
Revel路由
路由采用声明性语法. 所有的路由都定义在一个routes文件中。 使用简单的语法匹配路由, 并从 URI 中提取参数到控制器中. 下面是带注释的示例:
# conf/routes # 这个文件定义了所有的路由 (优先级按照先后顺序) GET /login Application.Login # 匹配一个简单的路由 GET /hotels/ Hotels.Index # 匹配一个带或者不带斜线的路由 GET /hotels/:id Hotels.Show # 绑定到一个控制器参数 WS /hotels/:id/feed Hotels.Feed # WebSockets POST /hotels/:id/:action Hotels.:action # 自由绑定到一个控制器的多个方法 GET /public/*filepath Static.Serve("public") # 静态文件服务 * /:controller/:action :controller.:action # 自动捕捉所有动作,自动生成路由
反向路由以类型安全的方式生成. 例如下面的Save程序:
// 展示信息. func (c Hotels) Show(id int) revel.Result { hotel := HotelById(id) return c.Render(hotel) } // 保存信息,并重定向到Hotels.Show. func (c Hotels) Save(hotel Hotel) revel.Result { // validate and save hotel return c.Redirect(routes.Hotels.Show(hotel.Id)) }