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