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})
}
错误处理三原则
- service 层返回 error,handler 决定翻译成什么业务码;
- panic 交给恢复中间件,兜底 500 且写日志,不把堆栈吐给客户端;
- 参数校验失败统一 400,msg 直接可展示给用户。
这套写法是我所有 Gin 脚手架的默认模块,可在免费资源里获取模板。
对这个项目/资源感兴趣?
源码获取、定制开发或技术咨询,欢迎联系。