全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang自定义错误码_通过结构体或常量区分错误类型

推荐用结构体实现error接口来定义自定义错误码,如AppError含Code、HTTPStatus、Message和Err字段,配合常量枚举与统一响应封装,确保可识别、可扩展、安全可控。

在 Go 中实现自定义错误码,核心是让错误具备可识别的类型、可携带的上下文(如码值、消息、HTTP 状态等),并支持统一处理(比如日志记录、API 响应封装)。推荐用 结构体实现 error 接口 的方式,比纯常量更灵活、可扩展;常量可作为辅助,用于定义清晰的错误码枚举。

用结构体实现可携带错误码的 error 类型

定义一个结构体(如 AppError),内嵌错误信息字段,并实现 Error() 方法。这样既能满足 Go 的 error 接口契约,又能附加业务语义。

  • 包含字段:错误码(Code int)、HTTP 状态码(HTTPStatus int)、用户提示(Message string)、原始错误(Err error,用于链式错误追踪)
  • Error() 方法返回用户不友好的底层错误描述(供日志/调试用),而非 Message,避免敏感信息外泄
  • 提供构造函数(如 NewAppError(code, msg, httpStatus))和包装函数(如 Wrap(err, code, msg))提升可读性

用常量定义错误码枚举,提升可维护性

将所有业务错误码集中定义为具名常量,避免魔法数字散落各处。配合 iota 可自动递增,也支持显式赋值以预留扩展空间。

  • 按模块或场景分组,例如:const ( UserNotFound = 1001; InvalidPassword = 1002; OrderAlreadyPaid = 2001 )
  • 可搭配字符串映射(map[int]string)或方法(func (c ErrorCode) String() string)实现错误码转描述
  • 注意:常量本身不构成 error,需与结构体组合使用(如 return &AppError{Code: UserNotFound, Message: "用户不存在"}

统一错误处理与响应封装

在 HTTP handler 或中间件中,对返回的 error 进行类型断言,提取结构体中的 CodeHTTPStatus,生成标准 JSON 响应。

  • 使用 errors.As() 判断是否为 *AppError,避免直接类型断言导致 panic
  • 默认 fallback:非 AppError 的 error(如 io.EOFjson.UnmarshalError)视为服务端内部错误,返回通用码(如 50000)和 500 状态
  • 可扩展:支持国际化(根据请求头选择 Message 语言版本)、自动上报错误码统计

避免常见误区

结构体错误不是“越重越好”,关键在职责清晰和易用性。

  • 不要把结构体设计成大而全的“错误中心”,只保留必要字段(码、状态、提示、原始 err)
  • 不要在 Error() 方法里返回 Message —— 它面向开发者,不是终端用户
  • 不要用常量替代错误类型:仅靠 if err == ErrNotFound 难以携带动态上下文(如用户 ID),结构体才能承载
  • 不要忽略错误链:用 fmt.Errorf("xxx: %w", err) 包装时,确保 AppError 支持 Unwrap() 方法以便调试


# word  # js  # json  # go  # golang  # app  # ai  # 状态码  # 中间件  # EOF  # String  # 常量  # if  # 封装  # 构造函数  # Error  # const  # 字符串  # 结构体  # int  # 接口  # iota  # map  # http  # 错误码  # 自定义  # 链式  # 要把  # 不存在  # 又能  # 越好  # 而非  # 错误信息  # 可作 


相关文章: 如何用好域名打造高点击率的自主建站?  如何构建满足综合性能需求的优质建站方案?  建站之星客服服务时间及联系方式如何?  如何在云虚拟主机上快速搭建个人网站?  自助网站制作软件,个人如何自助建网站?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何彻底删除建站之星生成的Banner?  如何通过VPS搭建网站快速盈利?  javascript中对象的定义、使用以及对象和原型链操作小结  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  英语简历制作免费网站推荐,如何将简历翻译成英文?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  制作营销网站公司,淘特是干什么用的?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  淘宝制作网站有哪些,淘宝网官网主页?  浅谈Javascript中的Label语句  如何选择可靠的免备案建站服务器?  如何在IIS服务器上快速部署高效网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  如何通过wdcp面板快速创建网站?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  如何快速上传自定义模板至建站之星?  ,怎么在广州志愿者网站注册?  网页设计网站制作软件,microsoft office哪个可以创建网页?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  如何快速选择适合个人网站的云服务器配置?  如何在阿里云通过域名搭建网站?  视频网站制作教程,怎么样制作优酷网的小视频?  建站之星2.7模板快速切换与批量管理功能操作指南  如何生成腾讯云建站专用兑换码?  如何快速完成中国万网建站详细流程?  定制建站策划方案_专业建站与网站建设方案一站式指南  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  如何获取上海专业网站定制建站电话?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  小型网站制作HTML,*游戏网站怎么搭建?  智能起名网站制作软件有哪些,制作logo的软件?  如何用VPS主机快速搭建个人网站?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  网站制作公司排行榜,四大门户网站排名?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  装修招标网站设计制作流程,装修招标流程?  个人网站制作流程图片大全,个人网站如何注销?  如何解决VPS建站LNMP环境配置常见问题?  如何选择最佳自助建站系统?快速指南解析优劣  盘锦网站制作公司,盘锦大洼有多少5G网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。