定义统一响应结构并封装工具函数,通过中间件捕获错误,实现Go Web服务中规范的错误处理返回格式,提升API一致性和前端对接效率。

在Go语言开发Web服务时,统一错误处理返回格式能提升API的规范性和前端对接效率。通过设计一致的响应结构,可以让客户端更方便地解析结果,同时减少重复代码。
创建一个通用的响应模型,包含状态码、消息、数据等字段:
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
使用omitempty标签确保没有数据时,Data字段不会出现在JSON输出中。
提供几个常用函数简化成功与错误的返回:
立即学习“go语言免费学习笔记(深入)”;
func Success(data interface{}) *Response {
return &Response{
Code: 200,
Message: "success",
Data: data,
}
}
func Error(code int, message string) *Response {
return &Response{
Code: code,
Message: message,
}
}
在HTTP处理器中直接返回结构化数据:
func GetUser(w http.ResponseWriter, r *http.Request) {
user, err := getUserFromDB(1)
if err != nil {
json.NewEncoder(w).Encode(Error(500, "获取用户失败"))
return
}
json.NewEncoder(w).Encode(Success(user))
}
通过中间件捕获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 {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(Error(500, "系统内部错误"))
}
}()
next.ServeHTTP(w, r)
})
}
结合自定义error类型,可在中间件中判断错误种类并返回不同提示。
基本上就这些。核心是结构统一、封装复用、层级清晰。不复杂但容易忽略细节。做好了能省去很多后期调整成本。
以上就是GolangWeb错误处理统一返回格式方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号