新闻中心
Golang如何统一管理业务errorCode_Golang errorCode设计规范与实现方式
统一管理业务错误码需遵循唯一性、可读性、可扩展性原则,采用SSS-TT-NNN格式编码,通过ErrorCode接口和BizError结构体封装错误信息,集中定义在独立包中按模块维护,结合pkg/errors实现堆栈追踪,利用中间件统一API返回格式并处理错误,提升代码可读性与系统可观测性。

在 Go 项目中,统一管理业务错误码不仅能提升代码可读性,还能让前后端协作更高效。一个清晰的 error code 设计规范,有助于日志排查、监控告警和用户提示。以下是 Golang 中业务 errorCode 的设计思路与实现方式。
1. 错误码设计原则
良好的错误码体系应满足以下几个核心要求:
- 唯一性:每个错误码在整个系统中唯一,避免冲突
- 可读性:通过结构化编码(如模块+类型+序号)快速识别来源
- 可扩展性:支持新增模块或错误类型而不影响现有逻辑
- 国际化友好:错误码只做标识,错误信息可通过 i18n 动态加载
建议格式:SSS-TT-NNN
- SSS:服务/模块编号(3位数字)
- TT:错误类型(2位数字)
- NNN:具体错误序号(3位数字)
例如:101-01-001 表示「用户服务 - 参数错误 - 用户名不能为空」。
2. 定义错误码结构体与接口
使用结构体封装错误码、消息和 HTTP 状态码,便于统一处理。
type ErrorCode interface {
Code() string
Message() string
Status() int
}
<p>type BizError struct {
code string
message string
status int
}</p><p>func (e <em>BizError) Code() string { return e.code }
func (e </em>BizError) Message() string { return e.message }
func (e *BizError) Status() int { return e.status }</p>通过接口抽象,可以灵活扩展数据库错误、第三方调用错误等不同类别。
3. 集中定义错误码常量
在独立包中(如 pkg/errors)集中管理所有错误码:
var (
ErrUsernameRequired = &BizError{code: "101-01-001", message: "用户名不能为空", status: 400}
ErrUserNotFound = &BizError{code: "101-02-001", message: "用户不存在", status: 404}
ErrInvalidToken = &BizError{code: "102-03-001", message: "无效的访问令牌", status: 401}
)
按模块建立子包或文件(user_errors.go, order_errors.go),提高维护性。
Glarity
Glarity是一款免费开源的AI浏览器扩展,提供YouTube视频总结、网页摘要、写作工具等功能,支持免费的镜像翻译,电子邮件写作辅助,AI问答等功能。
131
查看详情
4. 结合 errors.Wrap 实现堆栈追踪
使用 github.com/pkg/errors 包保留调用栈:
if user == nil {
return errors.Wrap(ErrUserNotFound, "query failed")
}
在日志中可通过 %+v 输出完整堆栈,便于定位问题根因。
同时提供转换函数,提取原始错误码:
func GetErrorCode(err error) string {
if e, ok := err.(*BizError); ok {
return e.Code()
}
// 解包 wrapped error
if wrapped := errors.Cause(err); wrapped != nil {
if e, ok := wrapped.(*BizError); ok {
return e.Code()
}
}
return "UNKNOWN"
}
5. 统一返回格式与中间件处理
API 返回结构标准化:
{
"code": "101-02-001",
"message": "用户不存在",
"data": null
}
使用 Gin 或其他框架时,可通过中间件自动捕获 panic 和业务错误:
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
c.JSON(500, gin.H{"code": "999-99-999", "message": "系统内部错误"})
}
}
<pre class='brush:php;toolbar:false;'> c.Next()
// 检查是否有设置错误
if len(c.Errors) > 0 {
e := c.Errors[0]
code := GetErrorCode(e.Err)
msg := GetErrorMessage(code) // 可结合语言配置
status := GetHttpStatus(e.Err)
c.JSON(status, gin.H{"code": code, "message": msg})
}
}}
基本上就这些。关键是早定规范、集中管理、统一输出。
以上就是Golang如何统一管理业务errorCode_Golang errorCode设计规范与实现方式的详细内容,更多请关注其它相关文章!
# 铜陵关键词排名工具下载
# 中文网
# 不存在
# 等功能
# 错误信息
# 如何使用
# 如何实现
# 山西网络营销的推广方法
# 农特营销推广方案设计
# 可通过
# 安宁网站建设公司推荐
# 岳阳整合营销推广怎么样
# 营销推广工作具体干啥
# 佛山企业网站优化有哪些
# Seo综合查询伦理
# 南阳官网营销推广
# 晋宁网站建设哪家好
# golang
# 设计规范
# 错误码
# red
# 代码可读性
# 状态码
# ai
# 栈
# 后端
# app
# 编码
# github
# go
# json
# git
# js
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Win11怎么开启省电模式_Win11电池节电模式自动开启
地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站
打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门
Go语言中高效处理x-www-form-urlencoded表单数据
一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法
优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法
新手怎么开始学化妆 零基础化妆入门教程
Lar*el DB::listen 事件中的查询执行时间单位解析
蛙漫移动版在线看 蛙漫手机浏览器直达入口
AO3官方镜像站点汇总 AO3同人作品网页版直达链接
mcjs网页版在线存档 mcjs云存档登录入口
苹果手机如何防止被恶意App追踪
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
QQ邮箱网页版入口 QQ邮箱官方邮箱登录通道
韩小圈电脑版在线入口_网页版免费登录地址
css链接悬停下划线样式如何自定义_使用::after结合content和transition
ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接
Golang指针如何与map组合使用_Golang map指针组合实践
优化Log4j2控制台输出性能:解决异步日志瓶颈
Kafka Streams中基于消息头条件过滤消息的实现指南
高德地图沿途添加点失败如何解决 高德多点规划方法
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
163邮箱官方主页登录 直达网易邮箱登录核心页面
如何使用 Excel 发布器与 Power BI 分享 Excel 洞察
J*a递归快速排序中静态变量的状态管理与陷阱
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
zookeeper 都有哪些功能?
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
Python模块化编程:有效管理依赖与避免循环引用
微博网页版首页入口 微博电脑端官网登录链接
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
UC浏览器网页版登录入口官网 电脑版网址入口
支付宝如何设置安全保护_支付宝安全设置的全面教程
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
J*aScript实现单选按钮与关联输入框的联动禁用教程
Lar*el Excel导入时生成自定义递增ID的策略与实践
Win11怎么关闭快速启动_Win11彻底关机设置教程
快速CSGO开箱网站指南 CSGO开箱平台推荐
Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
海棠账号登录入口_登录海棠账户同步阅读记录
Python类型检查:优化关联可选属性的Mypy推断策略
必由学官网首页入口 必由学教师网页版登录指南
Tabulator表格日期时间排序问题及自定义解决方案


2025-12-14
浏览次数:次
返回列表