Revel是一个go语言写的web框架,这个框架源于java的 Play! Framework.清晰的MVC结构,是现在go语言Web框架中优秀的框架。
Revel的功能有
1.热部署
Revel会自动编译你的go代码和templates模板文件,这个类似jsp功能。
2.简单的选择
Revel提供了一个工具包,用户日常的网络维护。也可以放弃这个工具包,直接访问底层应用。
3.轻量级线程
Revel建立在Go Http Server之上,使用Goroutine来处理请求。
Quick Start
安装revel之前,先安装go环境
安装还需要hg和git支持
设置GOPATH,然后把revel安装到GOPATH内
go get github.com/robfig/revel
编译revel
go build -o bin/revel github.com/robfig/revel/cmd
运行revel
bin/revel run github.com/robfig/revel/samples/chat
这里运行了一个revel的应用chat
Revel应用结构
3 | /controllers #app下用于存放controllers的目录 |
6 | /controllerName #与controller名对应目录,其下存放模板文件 |
9 | /public #静态文件,css,js,图片 |
Revel的MVC实现
Model
model就是一个普通结构体,存放属性
View
Revel的View通过 Go Templates来实现
模板存放于views目录下,命名方式是ControllerName/ActionName.html
1 | {{/* app/views/Application/Register.html */}} |
3 | {{template "header.html" .}} |
6 | <form action="/register" method="POST"> |
7 | {{with $field := field "user.Username" .}} |
8 | <p class="{{$field.ErrorClass}}"> |
9 | <strong>Username:</strong> |
10 | <input type="text" name="{{$field.Name}}" size="16" value="{{$field.Flash}}"> * |
11 | <span class="error">{{$field.Error}}</span> |
15 | {{/* other fields */}} |
18 | <input type="submit" value="Register"> <a href="/">Cancel</a> |
22 | {{template "footer.html" .}} |
Controller
Controller:负责数据的绑定,验证,cookie和session的处理,业务处理及返回
1 | / / app / controllers / app.go |
2 | type Application struct { |
3 | * revel.Controller / / 创建一个Application的Controller,每一个Controller必须依赖 * revel.Controller,在go中,相当于继承了 * revel.Controller |
6 | func (c Application) Register() revel.Result { / / 定义一个Controller的Action |
11 | func (c Application) SaveUser(user models.User, verifyPassword string) revel.Result { |
12 | c.Validation.Required(verifyPassword) / / 通过Controller内部工具来验证验证 |
13 | c.Validation.Required(verifyPassword = = user.Password) |
14 | Message( "Password does not match" ) |
15 | user.Validate(c.Validation) |
17 | if c.Validation.HasErrors() { |
20 | return c.Redirect(Application.Register) |
23 | user.HashedPassword, _ = bcrypt.GenerateFromPassword( |
24 | []byte(user.Password), bcrypt.DefaultCost) |
25 | err : = c.Txn.Insert(&user) |
30 | c.Session[ "user" ] = user.Username / / Session处理 |
31 | c.Flash.Success( "Welcome, " + user.Name) |
32 | return c.Redirect(Hotels.Index) / / 从定向到另外一个Action |
Routing
在mvc中还有重要一点就是routing,Revel如何通过连接来定位Action呢,那需要Routing。
在conf下有一个routes文件用来配置,格式如下
2 | GET /login Application.Login # A simple path |
3 | GET /hotels/? Hotels.Index # Match /hotels and /hotels/ (optional trailing slash) |
4 | GET /hotels/{id} Hotels.Show # Extract a URI argument (matching /[^/]+/) |
5 | POST /hotels/{<[0-9]+>id} Hotels.Save # URI arg with custom regex |
6 | WS /hotels/{id}/feed Hotels.Feed # WebSockets. |
7 | POST /hotels/{id}/{action} Hotels.{action} # Automatically route some actions. |
8 | GET /public/ staticDir:public # Map /app/public resources under /public/... |
9 | * /{controller}/{action} {controller}.{action} # Catch all; Automatic URL generation |
支持Http的方法及WobSockets
对于Revel简单介绍到这里了
本篇来源:http://blog.gcove.net/go%E8%AF%AD%E8%A8%80web%E6%A1%86%E6%9E%B6revel%E4%BB%8B%E7%BB%8D.html