GolangWeb开发中错误统一返回示例

定义统一响应结构体Response包含Success、Message、Data和Code字段;2. 封装Error和Success函数用于返回标准化的错误和成功响应;3. 使用RecoverMiddleware中间件捕获panic并返回统一错误格式;4. 在Handler中通过Error函数返回各类业务错误,确保前后端交互一致性。

GolangWeb开发中错误统一返回示例

在Golang Web开发中,统一错误返回格式有助于前端更好地处理响应,提升接口的规范性和可维护性。下面是一个常见的统一错误返回示例,基于标准HTTP状态码和自定义业务错误码设计。

统一响应结构定义

定义一个通用的API响应结构体,包含成功标志、消息、数据和错误码:

 type Response struct {     Success bool        `json:"success"`     Message string      `json:"message"`     Data    interface{} `json:"data,omitempty"`     Code    int         `json:"code"` } 

Success 表示请求是否成功,Message 返回提示信息,Data 返回具体数据(成功时填充),Code 是业务或HTTP状态码。

错误响应封装函数

封装几个常用的返回方法,便于在Handler中调用:

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

 func JSON(w http.ResponseWriter, statusCode int, data interface{}) {     w.Header().Set("Content-Type", "application/json")     w.WriteHeader(statusCode)     json.NewEncoder(w).Encode(data) }  func Error(w http.ResponseWriter, message string, code int) {     resp := Response{         Success: false,         Message: message,         Code:    code,     }     JSON(w, code, resp) }  func Success(w http.ResponseWriter, data interface{}, message string) {     resp := Response{         Success: true,         Message: message,         Data:    data,         Code:    http.StatusOK,     }     JSON(w, http.StatusOK, resp) } 

通过 Error 函数可以统一返回错误,避免散落在各处的错误处理逻辑。

中间件中捕获异常

使用中间件捕获未处理的panic,并返回统一错误格式:

GolangWeb开发中错误统一返回示例

挖错网

一款支持文本、图片、视频纠错和AIGC检测的内容审核校对平台。

GolangWeb开发中错误统一返回示例28

查看详情 GolangWeb开发中错误统一返回示例

 func RecoverMiddleware(next http.Handler) http.Handler {     return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {         defer func() {             if err := recover(); err != nil {                 log.Printf("Panic: %v", err)                 Error(w, "Internal server error", http.StatusInternalServerError)             }         }()         next.ServeHTTP(w, r)     }) } 

将此中间件注册到路由中,可防止服务因panic而中断,并保证错误格式一致。

在Handler中使用示例

实际业务处理中,可以这样返回错误:

 func GetUserHandler(w http.ResponseWriter, r *http.Request) {     // 模拟错误     if r.URL.Query().Get("id") == "" {         Error(w, "User ID is required", http.StatusBadRequest)         return     }      // 模拟查不到用户     user := getUserFromDB("123")     if user == nil {         Error(w, "User not found", http.StatusNotFound)         return     }      Success(w, user, "User retrieved successfully") } 

这样无论成功还是失败,前端收到的JSON结构都是一致的,便于统一处理。

基本上就这些。通过结构体+封装函数+中间件的方式,能有效实现Golang Web项目中的错误统一返回,提高代码整洁度和前后端协作效率。

js 前端 json go golang app usb 后端 路由 状态码 web项目 red golang 中间件 json 封装 Error 结构体 接口 http

上一篇
下一篇
text=ZqhQzanResources