使用Revel(go)開發網站

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Revel很好的利用了Go語言的goroutine,把每一個request都分配到了goroutine裡。不用再寫一大堆的回調。如果你寫過nodejs的話就會深刻的體會到callback hell是什麼樣子的。正是由於Revel有了goroutine,Revel的效能也有了很大的提升。官網號稱請求的輸送量是Rails的3到10倍。Revel的效能好,在開發方面也提供了非常全面的工具。常用的路由、模板、session、參數解析、等幾乎都有,甚至還提供了一個測試架構。而這些東西的開發都是模組化的,也就是你可以用自己的實現來代替上述提到的工具。比如,用你覺得合適的活著自己開發的router來代替預設的路由。

這裡預設的你已經配置好了go env。在GOPATH所指定的目錄中的一個裡,運行命令go get github.com/revel/revel之後再運行go get github.com/revel/cmd/revel。好的這個時候你會報錯說無法import到websocket這個包。感謝偉大的全國防火牆,這部分的代碼被屏蔽了。雖然直接下載不行,但是代碼在github上還是有的。所以,還是可以手動下載,之後配置上的。

這裡就需要知道go的另一個很好的工具:http://gopm.io/。這是一個類似於nodejs的npm一樣的工具。他會根據版本號碼來下載對應的go包,而不是git、hg什麼的。你可以下載這個工具,也可以點download項進入下載頁面(這裡:http://gopm.io/download)。然後在import path裡輸入 golang.org/x/net,點擊下載。這個包就下載下來了。

下載成功後,解壓下載包:

很大的一包。最後就是我們需要的websocket包。我們準備把全部的這些包都放在需要的目錄下。這個時候回頭看看報錯內容:golang.org/x/net/websocket。但是在我們的GOPATH/src目錄下是沒有這個目錄的。所以我們需要建立websocket之前的全部目錄。之後把我們上面解壓出來的全部的內容拷貝過去。這個問題就可以解決了。最後,手動build一下revel。執行命令:go build github.com/revel/cmd/revel。之後就會在bin目錄下產生revel的二進位可執行檔。到這裡revel的安裝就算完成了。

完成安裝後,運行revel命令會出現如下的提示:

localhost:golang user$ revel~~ revel! http://revel.github.io~usage: revel command [arguments]The commands are:    new         create a skeleton Revel application    run         run a Revel application    build       build a Revel application (e.g. for deployment)    package     package a Revel application (e.g. for deployment)    clean       clean a Revel application's temp files    test        run all tests from the command-lineUse "revel help [command]" for more information.

運行revel new命令,revel會為你產生一個預設的網站。命令如下:revel new github.com/first_test/app。應為這個網站只是測試用的,我還要產生更多的其他的網站,所以這裡的目錄略複雜一點。你可以根據自己的需要決定目錄。大體的目錄結構式這樣的:

運行命令revel run,例如:revel run github.com/first_test/app。這個時候一個網站已經運行起來了。在瀏覽器中輸入localhost:9000,斷行符號。你會看到:

現在安裝和配置已經完成。

開發之前先認識一下revel為我們產生的目錄結構:

app                   項目根目錄├── app               MVC架構目錄│   ├── controllers   控制器目錄│   ├── init.go│   ├── models        模型目錄│   ├── routes│   ├── tmp│   └── views         視圖目錄├── conf│   ├── app.conf      設定檔│   └── routes        路由檔案├── messages          國際化目錄├── public            靜態檔案目錄└── tests

看起來好複雜的樣子。其實對於開發人員來說最常用的並沒有那麼多。最簡單的public,這個目錄下面的是css、img和js檔案存放的地方。我們最常用到的就是app/conf/routesapp/app/controllers

現在我們在app/conf/routes這個檔案中增加一個路由GET  /blogs  Blogs.Blogs

儲存。在views目錄下建立blogs目錄並在其下建立blogs.html檔案。這裡只是作為樣本使用,所以blogs.html檔案是從index.html複製過來改了個名字的。

在controllers下建立我們自己的controller:blogs.go檔案,代碼如下:

package controllersimport "github.com/revel/revel"type Blogs struct {    *revel.Controller}func (c Blogs) Blogs() revel.Result {    return c.Render()}

現在重啟服務,在瀏覽器中輸入localhost:9000/blogs就會出現開始的時候出現的index頁的內容。這裡出現index的內容,如前所述,是因為我們直接把index頁的內容拷貝過來的。

由此可見,在revel上的開發一般是如下三步:

  1. 建立我們所需要的路由。
  2. 建立相關的view試圖。
  3. 建立controller。

完成以上三步就已經添加了我們自己需要的東西了。其他的內容的使用可以參考官網的文檔。

還有一點需要注意。先看:

我們在添加路由的檔案中需要注意最後的一行。*       /:controller/:action                    :controller.:action

*表示的是網路請求的方法:GET、POST、DELETE等,後面的/:controller/:action是網路請求的路徑,最後的:controller.:action是使用者定義的controller和在其中的action。所以按照這個路徑訪問的內容,如果controller和action都存在的話,是可以訪問到的。也就是說,如果我們沒有添加任何的路由,只用這個預設的產生的路由也是可以訪問到blogs的。可以試一下,在瀏覽器訪問localhost:9000/blogs/blogs。同樣可以顯示我們添加的blogs.html。這個路徑的第一個blogs就是controller的名字(當讓controller的首字母是會大寫的)。後面的一個blogs對應的就是controller的action也就是Blogs結構的Blogs方法。

controller的資料如何能傳給模板呢。修改blogs.html中的

<h1>It works!</h1>

<h1>{{.greeting}}</h1>

修改Blogs的代碼:

func (c Blogs) Blogs() revel.Result {    var greeting = "你好REVEL!"    return c.Render(greeting)}

這次不用重啟服務了。對於路由、controller和view的修改是不用重啟服務的。Revel支援hot-reload。修改後的內容都會自動重新編譯。重新整理瀏覽器。

開啟你的Revel之旅吧!

 

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.