Revel是一个go语言写的web框架,这个框架源于java的 Play! Framework.清晰的MVC结构,是如今go语言Web框架中优秀的框架。 css
Revel的功能有
1.热部署
Revel会自动编译你的go代码和templates模板文件,这个相似jsp功能。
2.简单的选择
Revel提供了一个工具包,用户平常的网络维护。也能够放弃这个工具包,直接访问底层应用。
3.轻量级线程
Revel创建在Go Http Server之上,使用Goroutine来处理请求。 html
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 java
Revel应用结构
3 |
/controllers #app下用于存放controllers的目录 |
6 |
/controllerName #与controller名对应目录,其下存放模板文件 |
9 |
/public #静态文件,css,js,图片 |
Revel的MVC实现
Model
model就是一个普通结构体,存放属性 git
View
Revel的View经过 Go Templates来实现
模板存放于views目录下,命名方式是ControllerName/ActionName.html github
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的处理,业务处理及返回 web
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文件用来配置,格式以下 cookie
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 session