Gin 统一响应与错误处理实践

Gin 项目里统一响应体与错误处理的实践:一次封装,全站受益。

2026-03-20

为什么需要统一响应

接口返回格式五花八门,前端就要写无数分支判断。统一响应体的核心价值是让「成功 / 失败 / 数据位置」三件事在每个接口里长得一样。

一个够用的封装

type Resp struct {
    Code int         `json:"code"` // 0 成功,非 0 业务错误码
    Msg  string      `json:"msg"`
    Data interface{} `json:"data,omitempty"`
}

func OK(c *gin.Context, data interface{}) {
    c.JSON(200, Resp{Code: 0, Msg: "ok", Data: data})
}

func Fail(c *gin.Context, code int, msg string) {
    c.JSON(200, Resp{Code: code, Msg: msg})
}

错误处理三原则

  1. service 层返回 error,handler 决定翻译成什么业务码;
  2. panic 交给恢复中间件,兜底 500 且写日志,不把堆栈吐给客户端;
  3. 参数校验失败统一 400,msg 直接可展示给用户。

这套写法是我所有 Gin 脚手架的默认模块,可在免费资源里获取模板。

对这个项目/资源感兴趣?

源码获取、定制开发或技术咨询,欢迎联系。

联系作者