容我废话一会,懒得看直接看正文

最近没事想写个blog学习一下go,发现了beego这个框架真的非常像PHP中的thinkphp框架,上手很简单的样子,于是简单看了看文档介绍什么的就开始写了,后台用vue-admin-template,然后beego写api,平时写原生PHP习惯了,都会封装公共方法Error()/Success() 什么的返回json,突然发现beego文档里只写了控制器返回json,而且比较麻烦

this.Data["json"] = json
this.ServeJSON()

于是,像往常一样,想做个公共文件,用来存放公共方法,开始还写了一个common包,然后发现不知道该怎么引controller中的方法进行输出,后来就想到了公共控制器这种,于是实现了下面的这种方法。

以下是正文

首先创建一个基类BaseController ,基类继承beego.Controller

package controllers

import (
    "github.com/astaxie/beego"
)

type BaseController struct {
    beego.Controller
}

type ReturnMsg struct {
    Code int
    Msg  string
    Data interface{}
}

func (this *BaseController) SuccessJson(data interface{}) {

    res := ReturnMsg{
        200, "success", data,
    }
    this.Data["json"] = res
    this.ServeJSON() //对json进行序列化输出
    this.StopRun()
}

func (this *BaseController) ErrorJson(code int, msg string, data interface{}) {

    res := ReturnMsg{
        code, msg, data,
    }

    this.Data["json"] = res
    this.ServeJSON() //对json进行序列化输出
    this.StopRun()
}

然后需要的地方继承这个基类

package admin

import (
        //如果不是同一个包需要引入一下
    //"blog/controllers"
    "blog/models"
)

type CategoryController struct {
        //不是同一个需要这样
    //controllers.BaseController
        BaseController
}

func (this *CategoryController) List() {
    data, err := models.List()
    if err != nil {
        this.ErrorJson(500, err.Error(), nil)
    }

    this.SuccessJson(data)

}

func (this *CategoryController) Create() {
    title := this.GetString("title")

    if title == "" {
        this.ErrorJson(503, "缺少必要参数", nil)
    }

        //省略代码

    id := 1
    this.SuccessJson(id)
}

本人刚接触golang,水平有限,希望能对您有所帮助