通过中间件和统一响应结构实现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错误处理中间件实现 统一错误响应格式的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号