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

在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,并返回统一错误格式:
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项目中的错误统一返回,提高代码整洁度和前后端协作效率。
以上就是GolangWeb开发中错误统一返回示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1409102.html
微信扫一扫
支付宝扫一扫