Go中处理API错误需统一分类、封装结构化响应并映射HTTP错误:定义APIError结构含code/status/message/details;用中间件统一处理panic和error;按4xx/5xx/业务错误语义化响应;集成validator聚合校验错误到details。
在 Go 中处理 API 调用错误并返回标准化响应,核心是统一错误分类、封装结构化响应体、并在 HTTP 层做一致的错误映射。不建议直接返回原始 error 或 panic,而应将错误转化为可预测的 JSON 响应(如 {"code": 400, "message": "invalid email", "details": {...}})。
创建一个可序列化的错误响应结构,包含状态码、业务码、用户提示和可选详情:
示例:
type APIError struct {
Code int `json:"code"` // HTTP 状态码(如 404)
Status string `json:"status"` // 如 "Not Found"
Message string `json:"message"` // 用户友好的提示
Details interface{} `json:"details,omitempty"`
}
func (e *APIError) Error() string { return e.Message }
// 快捷构造函数
func NewBadRequest(msg string, details ...interface{}) *APIError {
err := &APIError{
Code: http.StatusBadRequest,
Status: http.StatusText(http.StatusBadRequest),
Message: msg,
}
if len(details) > 0 && details[0] != nil {
err.Details = details[0]
}
return err
}
避免每个 handler 重复写 json.NewEncoder(w).Encode(...)。推荐使用中间件捕获 panic 和显式错误:
http.Handler 包装器,在 defer 中 recover panic,并转为 500 Internal Server Error
error(如 func(w http.ResponseWriter, r *http.Request) error),由包装器统一处理*APIError;是则按其 Code/Message 渲染;否则视为未预期错误,记录日志并返回 500不同错误应有明确归因,便于前端处理和监控:
validator 库)、缺失 header、格式错误 —— 用 NewBadRequest 或 NewUnauthorized
"user_not_found")放入 Details 字段,方便前端分支处理对请求体(如 json)做结构化校验时,不要只返回第一个错误。用 github.com/go-playground/validator/v10 收集全部字段错误,再聚合进 APIError.Details:
type CreateUserRequest struct {
Email string `json:"email" validate:"required,email"`
Age int `json:"age" validate:"required,gte=0,lte=120"`
}
// 校验后
if err := validate.Struct(req); err != nil {
errs := make(map[string]string)
for _, e := range err.(validator.ValidationErrors) {
errs[e.Field()] = e.Tag() + " validation failed"
}
return NewBadRequest("validation failed", errs)
}
# js
# 前端
# git
# json
# go
# github
# golang
# usb
# 栈
# ai
# 状态码
# api调用
# red
# 中间件
# 封装
# Error
# 指针
# internal
# 空指针
# nil
# 数据库
# http
# 结构化
# 第一个
# 推荐使用
# 并在
# 不存在
# 可选
# 转化为
# 创建一个
# 服务端
# 不可用
相关文章:
建站之星展会模版如何一键下载生成?
如何在云主机上快速搭建多站点网站?
网站制作新手教程,新手建设一个网站需要注意些什么?
常州自助建站费用包含哪些项目?
建站之星代理费用多少?最新价格详情介绍
如何通过PHP快速构建高效问答网站功能?
盘锦网站制作公司,盘锦大洼有多少5G网站?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星导航如何优化提升用户体验?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何实现建站之星域名转发设置?
平台云上自助建站如何快速打造专业网站?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
如何快速搭建响应式可视化网站?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
建站之星安装提示数据库无法连接如何解决?
宁波自助建站系统如何快速打造专业企业网站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
用v-html解决Vue.js渲染中html标签不被解析的问题
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
C++如何编写函数模板?(泛型编程入门)
在线教育网站制作平台,山西立德教育官网?
如何构建满足综合性能需求的优质建站方案?
微信推文制作网站有哪些,怎么做微信推文,急?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
建站之星CMS五站合一模板配置与SEO优化指南
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
如何用景安虚拟主机手机版绑定域名建站?
电商网站制作公司有哪些,1688网是什么意思?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
如何通过可视化优化提升建站效果?
,巨量百应是干嘛的?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何通过万网虚拟主机快速搭建网站?
如何在Windows服务器上快速搭建网站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
非常酷的网站设计制作软件,酷培ai教育官方网站?
建站10G流量真的够用吗?如何应对访问高峰?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
如何快速查询网站的真实建站时间?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
个人网站制作流程图片大全,个人网站如何注销?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何通过虚拟主机空间快速建站?
香港网站服务器数量如何影响SEO优化效果?
*请认真填写需求信息,我们会在24小时内与您取得联系。