鍍金池/ 問答/GO  Linux/ golang 如何為gin框架的Context部分增加方法?

golang 如何為gin框架的Context部分增加方法?

目前使用golang的gin框架做api接口
想對gin的JSON返回方法做一層封裝

func GetMiniProgramQrcode(c *gin.Context) {
    // 獲取應(yīng)用的appid
    appname := c.Param("appname")
    // 先檢查圖片是否存在
    page := c.PostForm("page")
    scene := c.PostForm("scene")
    width := c.PostForm("width")
    ...
    c.JSON(200, xxxxxx)

實現(xiàn)

func GetMiniProgramQrcode(c *gin.Context) {
    // 獲取應(yīng)用的appid
    appname := c.Param("appname")
    // 先檢查圖片是否存在
    page := c.PostForm("page")
    scene := c.PostForm("scene")
    width := c.PostForm("width")
    ...
    c.Success(200, xxxx)

Success 目的是封裝一固定的數(shù)據(jù)格式
想要實現(xiàn)如上功能
求思路

回答
編輯回答
短嘆

xxxx傳入的結(jié)構(gòu)體固定的不就好了嗎?

2018年2月21日 18:53
編輯回答
莫小染

在gin源代碼里面寫一個ext的go文件吧

2018年2月22日 18:17
編輯回答
陌顏

大致思路如下,偽代碼~

樓主根據(jù)自己實際需求修改下,
我們目前做的項目也是根據(jù)code去取得msg的返回值,略改動偽代碼,
把你的code傳進去SuccessResponse就再添加額外的方法處理錯誤碼的msg就好。

1、controller.go:

package controllers

import "github.com/gin-gonic/gin"

type Controller struct{}

func (ctl Controller) buildSuccessData(data interface{}) map[string]interface{} {
    return gin.H{
        "status": "success",
        "error":  false,
        "data":   data,
    }
}

func (ctl Controller) buildErrorData(message string) map[string]interface{} {
    return gin.H{
        "status":  "error",
        "error":   true,
        "message": message,
    }
}

func (ctl Controller) SuccessResponse(c *gin.Context, data interface{}) {
    c.JSON(200, ctl.buildSuccessData(data))
}

func (ctl Controller) ErrorResponse(c *gin.Context, statusCode int, message string) {
    c.JSON(statusCode, ctl.buildErrorData(message))
}

2、test_controller.go:

package controllers

import (
    "fmt"
    "net/http"

    "github.com/gin-gonic/gin"
)

type TestController struct {
    Controller
}


func (ctl TestController) Test(c *gin.Context) {
    ctl.ErrorResponse(c, http.StatusBadRequest, "error")
    ctl.SuccessResponse(c, gin.H{
        "test": "success",
    })
}
2017年10月31日 13:45