Revel 教程


閱讀(646.8k) 收藏 (93)

手冊(cè)簡(jiǎn)介

Revel是一個(gè)Go語(yǔ)言的web框架,其具有熱編譯,高性能,無(wú)狀態(tài),模塊化等特性,非常適合做web開(kāi)發(fā)。

手冊(cè)說(shuō)明

Go語(yǔ)言Web框架Revel介紹

Revel是一個(gè)Go語(yǔ)言的web框架,其具有熱編譯,高性能,無(wú)狀態(tài),模塊化等特性,非常適合做web開(kāi)發(fā)。這個(gè)框架源于java的 Play! Framework.清晰的MVC結(jié)構(gòu),是現(xiàn)在go語(yǔ)言Web框架中優(yōu)秀的框架。

Revel框架特性

熱編譯

編輯, 保存, 和 刷新時(shí),Revel自動(dòng)編譯代碼和模板,如果代碼編譯錯(cuò)誤,會(huì)給出一個(gè) 錯(cuò)誤提示,同時(shí)捕捉 運(yùn)行期錯(cuò)誤。

全棧功能

Revel 支持: 路由, 參數(shù)解析, 驗(yàn)證, session/flash, 模板, 緩存, 計(jì)劃任務(wù), 測(cè)試, 國(guó)際化 等功能。

高性能

Revel 基于 Go HTTP server 構(gòu)建。 這是techempower發(fā)布的 最新評(píng)測(cè)結(jié)果 。在各種不同的場(chǎng)景下進(jìn)行了多達(dá)三到十次的請(qǐng)求負(fù)載測(cè)試。

框架設(shè)計(jì)

同步

Go HTTP server 對(duì)于每個(gè)請(qǐng)求都運(yùn)行在 goroutine上。Write simple callback-free code without guilt。

無(wú)狀態(tài)

Revel 提供了保持Web層無(wú)狀態(tài)的可預(yù)知的擴(kuò)展。例如,會(huì)話數(shù)據(jù)被存儲(chǔ)在用戶的cookie中,緩存由memcached集群提供支持。

模塊化

Revel框架由被稱為 過(guò)濾器 的中間件組成,它實(shí)現(xiàn)了幾乎所有的請(qǐng)求處理功能。 開(kāi)發(fā)者可以自由地使用自定義的過(guò)濾器,比如如自定義的路由器,用以替換Revel默認(rèn)的路由過(guò)濾器。

快速開(kāi)始

1、安裝revel之前,先安裝go環(huán)境
2、安裝還需要hg和git支持
3、設(shè)置GOPATH,然后把revel下載并安裝到GOPATH內(nèi)

mkdir ~/gocode
cd $GOPATH
go get github.com/robfig/revel

4.編譯revel命令行工具,revel自己封裝了go的命令行工具,創(chuàng)建revel項(xiàng)目、打包發(fā)布基本都用這個(gè)工具,執(zhí)行下面的命令

go build -o bin/revel github.com/robfig/revel/cmd

5.可以將編譯出來(lái)的revel命令行工具加到$PATH變量中方便調(diào)用

export PATH="$PATH:$GOPATH/bin"

6.最后驗(yàn)證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.

概要說(shuō)明

本節(jié)簡(jiǎn)要介紹框架的幾個(gè)主要組成部分:

路由
采用簡(jiǎn)單的聲明性語(yǔ)法。反向路由類型安全。
控制器
組織端點(diǎn)到控制器。提供易用的數(shù)據(jù)綁定和表單驗(yàn)證。
模板
使用 Go 模板支持大規(guī)模應(yīng)用.
攔截器
在一個(gè)函數(shù)運(yùn)行之前或之后被調(diào)用. 控制器的方法都可以被注冊(cè)攔截.
過(guò)濾器
通用的功能可以使用過(guò)濾器來(lái)實(shí)現(xiàn).

Revel路由

路由采用聲明性語(yǔ)法. 所有的路由都定義在一個(gè)routes文件中。 使用簡(jiǎn)單的語(yǔ)法匹配路由, 并從 URI 中提取參數(shù)到控制器中. 下面是帶注釋的示例:

# conf/routes
# 這個(gè)文件定義了所有的路由 (優(yōu)先級(jí)按照先后順序)
GET    /login                Application.Login       # 匹配一個(gè)簡(jiǎn)單的路由
GET    /hotels/              Hotels.Index            # 匹配一個(gè)帶或者不帶斜線的路由
GET    /hotels/:id           Hotels.Show             # 綁定到一個(gè)控制器參數(shù)
WS     /hotels/:id/feed      Hotels.Feed             # WebSockets
POST   /hotels/:id/:action   Hotels.:action          # 自由綁定到一個(gè)控制器的多個(gè)方法
GET    /public/*filepath     Static.Serve("public")  # 靜態(tài)文件服務(wù)
*      /:controller/:action  :controller.:action     # 自動(dòng)捕捉所有動(dòng)作,自動(dòng)生成路由

反向路由以類型安全的方式生成. 例如下面的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))
}

更新記錄

在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)