通过中间件和统一响应结构实现Go Web错误处理,提升稳定性与可维护性;2. 定义ErrorResponse结构体规范错误格式;3. ErrorMiddleware捕获panic并返回标准错误;4. 封装writeError函数统一返回错误,确保前后端一致解析。

在Go语言Web开发中,错误处理是保证API稳定性和可维护性的关键环节。通过中间件实现统一的错误响应格式,可以避免散落在各处的错误处理逻辑,提升代码可读性和用户体验。
统一错误响应结构
定义一个标准化的错误响应格式,便于前端解析和展示。
例如:
{ "code": 400, "message": "请求参数无效", "details": "字段'email'格式不正确"}
对应的Go结构体:
立即学习“go语言免费学习笔记(深入)”;
type ErrorResponse struct {
Code int `json:”code”`
Message string `json:”message”`
Details string `json:”details,omitempty”`
}
错误处理中间件实现
中间件捕获后续处理函数中可能发生的panic或显式错误,并返回统一格式的响应。
示例实现:
func ErrorMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
err := recover()
if err != nil {
w.Header().Set(“Content-Type”, “application/json”)
w.WriteHeader(http.StatusInternalServerError)
json.NewEncoder(w).Encode(ErrorResponse{
Code: http.StatusInternalServerError,
Message: “服务器内部错误”,
Details: fmt.Sprint(err),
})
}
}()
next.ServeHTTP(w, r)
)
}
主动返回错误的封装
在业务逻辑中,应避免直接写入response,而是通过封装函数返回错误。
可以定义一个错误响应函数:
func writeError(w http.ResponseWriter, code int, message, details string) {
w.Header().Set(“Content-Type”, “application/json”)
w.WriteHeader(code)
json.NewEncoder(w).Encode(ErrorResponse{
Code: code,
Message: message,
Details: details,
})
}
在handler中使用:
if email == “” {
writeError(w, http.StatusBadRequest, “缺少必要参数”, “email不能为空”)
return
}
通过中间件和封装函数,所有错误都能以一致格式返回,便于前端统一处理。基本上就这些,不复杂但容易忽略。
以上就是Golang错误处理中间件实现 统一错误响应格式的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1399542.html
微信扫一扫
支付宝扫一扫