Beego快速入門
參考官方文檔:https://beego.me/docs/quickstart/
一,開發環境准備
安裝beego及bee工具(需要安裝Git)
go get -u github.com/astaxie/beego
go get -u github.com/beego/bee
命令執行完成之后,會在GoPath下生成目錄及文件(GoPath主要放置第三方依賴)
在環境變量中可以看到位置:
創建項目測試:
進入GoPath下的src目錄
bee new Hello
cd Hello
bee run
訪問localhost:8080
集成到Goland
進入GoPath目錄下,將創建的項目文件用Goland打開
運行快捷鍵 Ctrl+Shift + F10
二,路由設置
main.go源文件
package main
import (
_ "TestProject/routers"
"github.com/astaxie/beego"
)
func main() {
beego.Run()
}
其中_ "TestProject/routers"控制路由
在routers目錄下有一個router.go
代碼如下
package routers
import (
"TestProject/controllers"
"github.com/astaxie/beego"
)
func init() {
beego.Router("/", &controllers.MainController{})
}
其中beego.Router()函數執行了路由注冊
這個函數的功能是映射 URL 到 controller
例如:
beego.Router("/", &controllers.MainController{})
就是/映射到MainController
同理,類似的路由注冊方式
beego.Router("/user", &controllers.UserController{})
/user 映射到UserController
三,beego.Run()執行了哪些操作
-
解析配置文件
beego 會自動解析在 conf 目錄下面的配置文件
app.conf
,通過修改配置文件相關的屬性,我們可以定義:開啟的端口,是否開啟 session,應用名稱等信息。
-
執行用戶的 hookfunc
beego 會執行用戶注冊的 hookfunc,默認的已經存在了注冊 mime,用戶可以通過函數
AddAPPStartHook
注冊自己的啟動函數。 -
是否開啟 session
會根據上面配置文件的分析之后判斷是否開啟 session,如果開啟的話就初始化全局的 session。
-
是否編譯模板
beego 會在啟動的時候根據配置把 views 目錄下的所有模板進行預編譯,然后存在 map 里面,這樣可以有效的提高模板運行的效率,無需進行多次編譯。
-
是否開啟文檔功能
根據 EnableDocs 配置判斷是否開啟內置的文檔路由功能
-
是否啟動管理模塊
beego 目前做了一個很酷的模塊,應用內監控模塊,會在 8088 端口做一個內部監聽,我們可以通過這個端口查詢到 QPS、CPU、內存、GC、goroutine、thread 等統計信息。
-
監聽服務端口
這是最后一步也就是我們看到的訪問 8080 看到的網頁端口,內部其實調用了
ListenAndServe
,充分利用了 goroutine 的優勢
四,Controller運行邏輯
controllers包下的default.go代碼如下
package controllers
import (
"github.com/astaxie/beego"
)
type MainController struct {
beego.Controller
}
func (c *MainController) Get() {
c.Data["Website"] = "beego.me"
c.Data["Email"] = "astaxie@gmail.com"
c.TplName = "index.tpl"
}
上面的代碼顯示首先聲明了一個控制器 MainController
,控制器里面內嵌了 beego.Controller
,這就是 Go 的嵌入方式,也就是 MainController
自動擁有了所有 beego.Controller
的方法。
而 beego.Controller
擁有很多方法,其中包括 Init
、Prepare
、Post
、Get
、Delete
、Head
等方法。
上述代碼重寫了Get方法,同樣也可以重寫其他方法實現自定義的功能。
Get方法里面的代碼是URL請求映射后需要執行的邏輯,這里只是簡單的輸出數據,我們可以通過各種方式獲取數據,然后賦值到 this.Data
中,這是一個用來存儲輸出數據的 map,可以賦值任意類型的值,這里我們只是簡單舉例輸出兩個字符串。
最后一個就是需要去渲染的模板,this.TplName
就是需要渲染的模板,這里指定了 index.tpl
,如果用戶不設置該參數,那么默認會去到模板目錄的 Controller/<方法名>.tpl
查找,例如上面的方法會去 maincontroller/get.tpl
*(文件、文件夾必須小寫)*。
用戶設置了模板之后系統會自動的調用 Render
函數(這個函數是在 beego.Controller 中實現的),所以無需用戶自己來調用渲染。
當然也可以不使用模版,直接用 this.Ctx.WriteString
輸出字符串,如:
func (this *MainController) Get() {
this.Ctx.WriteString("hello")
}