新闻中心
Golang如何在API接口中返回标准错误
定义标准错误结构并封装响应函数,使用预定义错误码与HTTP状态码返回统一格式的错误信息,避免暴露敏感细节。

在Go语言开发API接口时,返回标准错误能让客户端更清晰地理解出错原因。直接返回原始错误信息不仅不友好,还可能暴露敏感信息。正确的做法是统一错误格式,结合HTTP状态码,提供可读性强、结构一致的响应。
定义标准错误响应结构
先定义一个通用的错误响应体,便于所有接口统一使用:
{
"error": {
"code": "invalid_request",
"message": "请求参数有误",
"status": 400
}
}
对应Go结构体可以这样写:
type Error struct {
Code string `json:"code"`
Message string `json:"message"`
Status int `json:"status"`
}
type ErrorResponse struct {
Error Error `json:"error"`
}
封装错误生成函数
通过预定义常见错误类型,减少重复代码:
var (
ErrInvalidRequest = Error{
Code: "invalid_request",
Message: "请求参数有误",
Status: 400,
}
ErrUnauthorized = Error{
Code: "unauthorized",
Message: "未授权访问",
Status: 401,
}
ErrInternal = Error{
Code: "internal_error",
Message: "服务器内部错误",
Status: 500,
}
)
再写一个辅助函数发送错误响应:
Pinokio
Pinokio是一款开源的AI浏览器,可以安装运行各种AI模型和应用
232
查看详情
func sendErrorResponse(w http.ResponseWriter, err Error) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(err.Status)
json.NewEncoder(w).Encode(ErrorResponse{Error: err})
}
在Handler中使用标准错误
实际处理请求时,根据情况调用对应的错误返回:
func LoginHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
sendErrorResponse(w, ErrInvalidRequest)
return
}
// 模拟校验失败
if !validCredentials(r) {
sendErrorResponse(w, ErrUnauthorized)
return
}
// 正常响应略...
}
处理未知错误并避免信息泄露
对于运行时panic或未预期错误,应记录日志但不返回细节给前端:
defer func() {
if r := recover(); r != nil {
log.Printf("Panic: %v", r) // 记录真实错误
sendErrorResponse(w, ErrInternal) // 返回通用提示
}
}()
基本上就这些。关键是结构统一、错误分类清晰、对外不暴露实现细节。这样前后端协作更高效,也提升API专业度。
以上就是Golang如何在API接口中返回标准错误的详细内容,更多请关注其它相关文章!
# 相关文章
# 网站改版后的推广办法
# 个人电商网站推广方案
# 房产用网站系统推广价格
# 抚顺网站模板建设介绍
# seo其实挺赚钱的
# 甘肃省排名seo加盟
# 新乡网站推广优化哪家好
# 莱芜网站建设开发有哪些
# 一屏seo推广技巧
# 鱼台营销推广哪种方式比较好
# 但不
# 解决问题
# 能让
# 中文网
# js
# 资源管理
# 错误信息
# 如何在
# 加载
# red
# 状态码
# 后端
# app
# go语言
# golang
# go
# json
# 前端
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
J*aScript中针对特定容器内图片动画的实现教程
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
自定义Bag-of-Words实现:处理带负号的词汇权重
理解Python模块与全局变量的作用域管理
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
Python自定义类排序:解决lambda键值访问TypeError的实践指南
J*aScript打印功能_j*ascript输出控制
J*aScript中向JSON对象添加新属性的正确姿势
小红书网页版入口链接分享 小红书官网直接进
淘宝支付提示失败如何解决 淘宝支付流程优化方法
Typer应用中灵活处理命令行参数的令牌化与解析
葱吃多了会怎样 葱吃多了会伤胃吗
React/Next.js中实现列表项的动态选择与移动
解决移动端滚动问题的overflow属性应用指南
Golang如何使用const iota_Go iota常量计数器讲解
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
vivo云服务网页版登录 怎么登录vivo云服务网页版
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
AO3官方在线访问地址 Archive of Our Own最新镜像合集
不同用户不同价格! 索尼开启账户个性化定价测试
python3时间如何用calendar输出?
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
知音漫客官网漫画下载_知音漫客网页版阅读记录
Flexbox布局实践:实现粘性导航栏与底部固定页脚
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
React Router 嵌套组件中 URL 重定向问题的解决方案
VS Code远程开发时如何处理文件权限问题
Django表单提交验证失败后保持字段值不刷新
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
C++如何操作大型数据集_使用C++流式处理(Streaming)技术避免一次性加载大文件
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
AI泡沫首次被“刺破”:GPU十年都无法存活!
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
在J*a中如何使用Stream.map转换元素_Stream映射操作解析
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
在Qt QML中通过Python字典动态更新TextEdit内容的教程
漫蛙2漫画入口 漫蛙正版网页漫画直达网址


2025-10-30
浏览次数:次
返回列表