Beego快速入門


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主要放置第三方依賴)

在環境變量中可以看到位置:

image-20200115135015322

image-20200122215135015322

創建項目測試:

進入GoPath下的src目錄

bee new Hello

cd Hello

bee run

訪問localhost:8080

image-20200115135404042

集成到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

image-20200115141909101

代碼如下

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,應用名稱等信息。

image-20200115142407446

  • 執行用戶的 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 擁有很多方法,其中包括 InitPreparePostGetDeleteHead 等方法。

上述代碼重寫了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")
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM