W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
前面我們了解了如何把用戶的請求分發(fā)到控制器,這小節(jié)我們就介紹大家如何來寫控制器,首先我們還是從源碼分析入手:
package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (this *MainController) Get() {
this.Data["Website"] = "beego.me"
this.Data["Email"] = "astaxie@gmail.com"
this.TplName = "index.tpl"
}
上面的代碼顯示首先我們聲明了一個控制器 MainController,這個控制器里面內(nèi)嵌了 beego.Controller,這就是 Go 的嵌入方式,也就是 MainController 自動擁有了所有 beego.Controller 的方法。
而 beego.Controller 擁有很多方法,其中包括 Init、Prepare、Post、Get、Delete、Head 等方法。我們可以通過重寫的方式來實現(xiàn)這些方法,而我們上面的代碼就是重寫了 Get 方法。
我們先前介紹過 beego 是一個 RESTful 的框架,所以我們的請求默認(rèn)是執(zhí)行對應(yīng) req.Method 的方法。例如瀏覽器的是 GET 請求,那么默認(rèn)就會執(zhí)行 MainController 下的 Get 方法。這樣我們上面的 Get 方法就會被執(zhí)行到,這樣就進(jìn)入了我們的邏輯處理。(用戶可以改變這個行為,通過注冊自定義的函數(shù)名
里面的代碼是需要執(zhí)行的邏輯,這里只是簡單的輸出數(shù)據(jù),我們可以通過各種方式獲取數(shù)據(jù),然后賦值到 this.Data 中,這是一個用來存儲輸出數(shù)據(jù)的 map,可以賦值任意類型的值,這里我們只是簡單舉例輸出兩個字符串。
最后一個就是需要去渲染的模板,this.TplName 就是需要渲染的模板,這里指定了 index.tpl,如果用戶不設(shè)置該參數(shù),那么默認(rèn)會去到模板目錄的 Controller/<方法名>.tpl 查找,例如上面的方法會去 maincontroller/get.tpl (文件、文件夾必須小寫)。
用戶設(shè)置了模板之后系統(tǒng)會自動的調(diào)用 Render 函數(shù)(這個函數(shù)是在 beego.Controller 中實現(xiàn)的),所以無需用戶自己來調(diào)用渲染。
當(dāng)然也可以不使用模版,直接用 this.Ctx.WriteString 輸出字符串,如:
func (this *MainController) Get() {
this.Ctx.WriteString("hello")
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: