公共方法一般放入基類控制器中,如果你沒有則可以創建一個base.go並在其中寫入一個BaseController作爲基類控制器:
package controllers
import (
"github.com/astaxie/beego"
)
type BaseController struct {
beego.Controller
}
type JsonReturn struct {
Msg string `json:"msg"`
Code int `json:"code"`
Data interface{} `json:"data"` //Data字段需要設置爲interface類型以便接收任意數據
//json標籤意義是定義此結構體解析爲json或序列化輸出json時value字段對應的key值,如不想此字段被解析可將標籤設爲`json:"-"`
}
func (c *BaseController) ApiJsonReturn(msg string,code int,data interface{}) {
var JsonReturn JsonReturn
JsonReturn.Msg = msg
JsonReturn.Code = code
JsonReturn.Data = data
c.Data["json"] = JsonReturn //將結構體數組根據tag解析爲json
c.ServeJSON() //對json進行序列化輸出
c.StopRun() //終止執行邏輯
}
然後在需要使用此方法的控制器中繼承此基類控制器即可,這裏需要注意的是基類控制器中的方法名首字母需要大寫,否則其他控制器無法訪問。
這裏我使用IndexController作爲演示繼承此基類控制器並調用方法來返回調用API獲取到的Json數據:
數據表結構和數據在之前的文章有提到:點我查看
package controllers
import (
"github.com/astaxie/beego/orm"
)
type IndexController struct {
BaseController
}
type UserDb struct {
Id int `json:"id" orm:"column(id)"`
Account string `json:"account" orm:"column(account)"`
Password string `json:"password" orm:"column(password)"`
CreateTime int `json:"create_time" orm:"column(create_time)"`
UpdateTime int `json:"update_time" orm:"column(update_time)"`
Status int `json:"status" orm:"column(status)"`
//json標籤意義是定義此結構體解析爲json或序列化輸出json時value字段對應的key值,如不想此字段被解析可將標籤設爲`json:"-"`
//orm的column標籤意義是將orm查詢結果解析到此結構體時每個結構體字段對應的數據表字段名
}
func (c *IndexController) Test(){
var user []UserDb
o := orm.NewOrm()
_, err := o.Raw("SELECT * FROM user").QueryRows(&user) //將查詢結果解析到結構體中,對應方式參考結構體中標籤說明
if err==nil{
c.ApiJsonReturn("請求成功",200,user) //調用基類控制器中的方法以返回Json數據
}
}
接下來使用Postman請求IndexController中的Test方法查看請求API得到的Json數據:
這裏我註冊了自動路由,可以通過 ”控制器名/方法名“ 直接訪問,以下是route.go中註冊方式:
package routers
import (
"github.com/astaxie/beego"
"testbeego/controllers"
)
func init() {
beego.AutoRouter(&controllers.IndexController{})
}