Golang实践之博客(六) 接口响应结构的封装|Go主题月

1,827 阅读1分钟

前言

在正式动工之前,对接口响应结构进行统一封装,好的规范能使项目更易于维护!

目标

  • 定义常用的响应状态
  • 接口响应结构统一封装

定义常用的响应状态

新增ApiState.go

package ApiState

const (
	SUCCESS = 200 // 正常响应
	ERROR   = 500 // 服务器异常
	ERROR_AUTH  = 401 // 拒绝访问
)

接口响应结构统一封装

新增ResponseView.go

package ApiState

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

type ResponseResult struct {
	Result bool        // 是否成功
	Msg    string      // 错误描述
	Code   int         // 错误码
	Data   interface{} // 返回数据
}

// 参数错误响应
func ArgErrApiResult(c *gin.Context, argName string) {
	c.JSON(SUCCESS, &ResponseResult{
		Result: false,
		Msg:    fmt.Sprintf("参数【%s】有误", argName),
		Code:   SUCCESS,
		Data:   nil,
	})
}

// 成功响应,带msg形参,msg为空设为success
func ResponseSuccessMsg(c *gin.Context, msg string, data interface{}) {
	if msg == "" {
		msg = "success"
	}
	c.JSON(SUCCESS, &ResponseResult{
		Result: true,
		Msg:    msg,
		Code:   SUCCESS,
		Data:   data,
	})
}

// 成功响应,不带msg形参,默认success
func ResponseSuccess(c *gin.Context, data interface{}) {
	c.JSON(SUCCESS, &ResponseResult{
		Result: true,
		Msg:    "success",
		Code:   SUCCESS,
		Data:   data,
	})
}

// 模板响应
func ResponseHtml(c *gin.Context, path string, data interface{}) {
	c.HTML(SUCCESS, path, data)
}

// 普通业务异常
func BusinessErrApiResult(c *gin.Context, msg string) {
	c.JSON(SUCCESS, &ResponseResult{
		Result: false,
		Msg:    msg,
		Code:   SUCCESS,
		Data:   nil,
	})
}

使用

HomeController调整

package HomeControler

import (
	"github.com/gin-gonic/gin"
	"golang-blog/Model/ViewModel/ApiState"
)

func Index(c *gin.Context) {
	ApiState.ResponseSuccess(c, "hello world")
}

func Hi(c *gin.Context) {
	
	// 获取参数name
	name := c.Query("name")

	// 参数name为空响应参数错误提示
	if name == "" {
		ApiState.ArgErrApiResult(c, "name")
		return
	}
	ApiState.ResponseSuccess(c, "Hi")
}

示例

image.png

image.png

image.png

项目地址

github.com/panle666/Go…