Revel是一個Go語言的web框架,其具有熱編譯,高性能,無狀態(tài),模塊化等特性,非常適合做web開發(fā)。
熱編譯
編輯, 保存, 和 刷新時,Revel自動編譯代碼和模板,如果代碼編譯錯誤,會給出一個 錯誤提示,同時捕捉 運行期錯誤。
全棧功能
Revel 支持: 路由, 參數解析, 驗證, session/flash, 模板, 緩存, 計劃任務, 測試, 國際化 等功能。
高性能
Revel 基于 Go HTTP server 構建。 這是techempower發(fā)布的 最新評測結果 。在各種不同的場景下進行了多達三到十次的請求負載測試。
框架設計
同步
Go HTTP server 對于每個請求都運行在 goroutine上。Write simple callback-free code without guilt。
無狀態(tài)
Revel 提供了保持Web層無狀態(tài)的可預知的擴展。例如,會話數據被存儲在用戶的cookie中,緩存由memcached集群提供支持。
模塊化
Revel框架由被稱為 過濾器 的中間件組成,它實現了幾乎所有的請求處理功能。 開發(fā)者可以自由地使用自定義的過濾器,比如如自定義的路由器,用以替換Revel默認的路由過濾器。
1、安裝revel之前,先安裝go環(huán)境
2、安裝還需要hg和git支持
3、設置GOPATH,然后把revel下載并安裝到GOPATH內
mkdir ~/gocode
cd $GOPATH
go get github.com/robfig/revel
4.編譯revel命令行工具,revel自己封裝了go的命令行工具,創(chuàng)建revel項目、打包發(fā)布基本都用這個工具,執(zhí)行下面的命令
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.
本節(jié)簡要介紹框架的幾個主要組成部分:
路由采用聲明性語法. 所有的路由都定義在一個routes文件中。 使用簡單的語法匹配路由, 并從 URI 中提取參數到控制器中. 下面是帶注釋的示例:
# conf/routes # 這個文件定義了所有的路由 (優(yōu)先級按照先后順序) 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") # 靜態(tài)文件服務 * /: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)) }