0

0

Golang错误码管理方案_使用常量定义API状态码

P粉602998670

P粉602998670

发布时间:2026-02-13 13:39:10

|

255人浏览过

|

来源于php中文网

原创

go中状态码须用const命名而非裸数字,以明确语义、便于搜索重构;应分离http状态码与业务错误码,统一管理、显式类型、配套text()方法,并通过is()支持errors.is()匹配,前端依赖稳定json字段名与全大写枚举。

golang错误码管理方案_使用常量定义api状态码

Go 里用 const 定义状态码,为什么不能直接写数字?

因为数字本身不带语义,400 是参数错误还是权限不足?调用方和维护者都得猜。用 const 给每个状态码起个名字,比如 ErrInvalidParam,能立刻知道意图,也方便全局搜索和重构。

常见错误是把状态码和错误消息混在一起定义,或者在多个包里重复定义同一组码——结果改一个地方漏了另一处,API 文档和实际返回对不上。

  • 所有状态码统一放在一个包里(如 pkg/code),导出为大写常量
  • 避免用 int 类型裸写,显式声明类型,比如 type Code int,再定义 const ErrNotFound Code = 404
  • 配套提供 Text() 方法或映射函数,把 Code 转成描述字符串,别在各处硬编码消息

HTTP 状态码和业务错误码要不要分开?

要分开。HTTP 状态码(如 404500)表达的是通信层/协议层结果;业务错误码(如 ErrOrderAlreadyPaid)表达的是领域逻辑失败。混用会导致前端难处理:比如 400 可能对应参数错、库存不足、用户被禁用三种完全不同的业务场景。

典型坑是把所有业务错误都塞进 400,前端只能靠响应体里的 code 字段区分,但 HTTP 客户端库默认不检查 body,容易误判为“请求成功”。

立即学习go语言免费学习笔记(深入)”;

ShopWe 网店系统
ShopWe 网店系统

1.修正会员卡升级会员级别的判定方式2.修正了订单换货状态用户管理中心订单不显示的问题3.完善后台积分设置数据格式验证方式4.优化前台分页程序5.解决综合模板找回密码提示错误问题6.优化商品支付模块程序7.重写优惠卷代码8.优惠卷使用方式改为1卡1号的方式9.优惠卷支持打印功能10.重新支付模块,所有支付方式支持自动对账11.去掉规格库存显示12.修正部分功能商品价格显示4个0的问题13.全新的支

下载
  • HTTP 状态码只反映响应性质:用 2xx 表示请求被接收并处理完毕(无论业务成功与否),4xx 表示客户端问题,5xx 表示服务端异常
  • 业务错误码放进响应体的 code 字段,类型建议用 string(如 "ORDER_PAID"),比整数更易读、可扩展
  • 不要用 HTTP 状态码承载业务分支逻辑,比如用 402 表示“余额不足”——402 是保留状态码,多数中间件不识别,且语义不符

errors.Is() 和自定义错误码怎么配合?

Go 1.13+ 的 errors.Is() 依赖错误是否实现了 Unwrap() 和底层错误匹配。如果只是把状态码藏在结构体字段里,errors.Is(err, ErrNotFound) 默认不会生效。

常见写法是让错误类型实现 Is(target error) bool 方法,手动比对状态码值。否则上层代码只能用类型断言或反射去取字段,既脆弱又难测试。

  • 定义错误类型时嵌入 error 接口,并实现 Is():比如判断 err 是否等于 ErrNotFound,就比较其 Code() 返回值
  • 避免在错误包装链中丢失状态码:用 fmt.Errorf("xxx: %w", origErr) 包装时,确保 origErr 自身支持 Is()
  • 测试时别只测错误字符串是否包含某关键词,要用 errors.Is() 断言具体错误码

前端怎么可靠地拿到并使用 Go 后端的状态码?

前端拿不到 Go 里的 const 名字,只能靠约定好的字符串或数字。所以后端输出的 code 字段必须稳定、文档化、不可随意变更。

最容易被忽略的是版本兼容:v1 接口返回 "USER_NOT_FOUND",v2 改成 "USER_MISSING",前端没改就会静默失败。还有大小写问题,比如 Go 里写 ErrUserNotFound,JSON 序列化成 errusernotfound(没加 json: tag)。

  • 所有业务错误码用全大写 + 下划线风格(如 "PAYMENT_TIMEOUT"),和 HTTP 状态码数字明确区隔
  • 在 struct 的 JSON tag 里显式指定字段名,比如 Code string `json:"code"`,别依赖默认小写转换
  • 上线前用自动化脚本扫描所有 code 字符串,生成前端可用的枚举 TS 文件,避免手写遗漏
事情说清了就结束。状态码不是写完就完的事,关键在定义之后的约束力——谁都能加新码,但没人管它有没有文档、有没有前端适配、会不会和旧码冲突。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

206

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

235

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

346

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

212

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

402

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

322

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

197

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

824

2025.06.17

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

14

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 5.1万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号