天天看點

Go實戰準備工作---BeeGo的使用搭建Beego環境安裝Bee工具使用orm和web功能代碼資料封裝統一處理

Go實戰準備工作---BeeGo的使用

  • 搭建Beego環境
  • 安裝Bee工具
  • 使用orm和web功能代碼
  • 資料封裝統一處理

之前就讨論過,究竟是使用Beego還是Gin,其實兩者之間Gin的效率是要高于BeeGo的,并且也比BeeGo更加靈活。其他的架構就不加入參考了,start太少了,就跟招聘一樣,不是985/211的有些企業都不看。但是,我們還是選擇了BeeGo。理由是:大家都是PHP出身的,BeeGo生成的MVC架構模式,大家比較容易了解一點,路由和日志都是封裝好了的,并且,Session也是自帶的。說成僞裝成PHP的Go架構,一點不為過。開發速度也是比Gin要快一點,畢竟人家都幫你搭建好了基本骨架。

雖然很low,但是企業也要計算成本,時間和效率。基于之前的項目用的是Gin,這次基本要重新研究這個架構了,既然要用,就用個全套的。 選擇使用的依賴庫有

_ "Callout_Go/routers"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
           

搭建Beego環境

這個可以網上去看,很多教程的,可能比我這個還詳細。以Windows環境為例,首先,下載下傳并安裝好GO并配置好GOROOT和GOPATH環境變量(如果您是用msi包安裝的go,那麼這些環境變量已經設定好了)。并在Path環境變量中加入%GOPATH%\bin和%GOROOT%bin。

直接在Terminal視窗下執行go get github.com/astaxie/beego,可能會碰到連接配接逾時問題,這個可以配置GitHub的ip到本地的hosts檔案下,會快很多,切記加上代理,否則真的會等好半天,有翻牆的同學,就厲害了。

安裝Bee工具

在Terminal視窗下執行 go get github.com/beego/bee

在%GOPATH%\bin下會有bee.exe檔案

Go實戰準備工作---BeeGo的使用搭建Beego環境安裝Bee工具使用orm和web功能代碼資料封裝統一處理

驗證安裝結果

Go實戰準備工作---BeeGo的使用搭建Beego環境安裝Bee工具使用orm和web功能代碼資料封裝統一處理

bee提供自動生成工程指令,bee new projectName

生成之後進入工程,執行bee run 或者bee run main.go

執行結果是:

Go實戰準備工作---BeeGo的使用搭建Beego環境安裝Bee工具使用orm和web功能代碼資料封裝統一處理

對于習慣使用GoLand工具的夥伴,第一次打開BeeGo生成的工程會各種報錯,還沒法直接引用,有潔癖或者強迫症的人,看着心裡就很難受。我使用go mod vendor 生成vendor檔案夾,這樣就沒有錯誤,也友善我們送出git的時候少加一點依賴庫。

Go實戰準備工作---BeeGo的使用搭建Beego環境安裝Bee工具使用orm和web功能代碼資料封裝統一處理

使用orm和web功能代碼

簡單粗暴,直接使用接口接收和響應操作。隻需要在main入口函數出調用beego.Run()就可以執行了,配置檔案可以直接寫在app.conf檔案中,資料庫的連接配接需要先注冊,并設定一個預設的資料庫别名,否則會連接配接失敗并提示缺少default預設資料庫,有點詭異,後面進行實際開發肯定也會有其他詭異的地方。簡短的mian函數處理代碼片段參考下:

func main() {
   beego.BConfig.WebConfig.Session.SessionOn = true//開始session
   defaultDB := beego.AppConfig.String("defaultDB")
   err := orm.RegisterDriver("mysql", orm.DRMySQL)
   if err != nil {
      fmt.Println("RegisterDriver err: ", err)
   }
   err = orm.RegisterDataBase("default", "mysql", defaultDB)
   if err != nil {
      fmt.Println("RegisterDataBase err: ", err)
   }
   beego.Run()
}
           

資料封裝統一處理

後端資料統一的問題,這個有的公司可能還沒有,但是目前來說大部分公司接口傳回資料并沒有一個統一的格式,比如我們公司的其他項目組,不過多解釋,聽到就蛋疼,前後端都是肉痛,算是前人留坑,後人懶的結果吧,當然,公司高層不作為也算一個原因。好在,目前的這個項目是有個大緻的架構的,是以,我們統一寫個傳回函數處理。直接在controllers檔案夾下建立一個公共控制器,内容如下:

package controllers

import "github.com/astaxie/beego"

type CommonController struct {
	beego.Controller
}

type JsonStruct struct {
	Code  int         `json:"code"`
	Msg   string      `json:"msg"`
	Data  interface{} `json:"data"`
	Count int64       `json:"count,omitempty"`
}

func ReturnSuccess(msg string, data interface{}, count int64) (json *JsonStruct) {
	json = &JsonStruct{Code: 0, Msg: msg, Data: data, Count: count}
	return
}

func ReturnError(code int, msg string) *JsonStruct {
	json := &JsonStruct{Code: code, Msg: msg}
	return json
}
           

注意,傳回的json的屬性值,這個花了我好半天才找到的,簡直是要命。 `json:“count,omitempty” 第一個參數是轉json之後的屬性輸出的值,第二個參數是如果count=0,字元串就是“”以此類推,變量值是預設值的話,就不輸出。換句話說,count=0,這個屬性就不輸出了。

至此,基本工作已經做好了,接下來就進行業務上的開發了。

繼續閱讀