Golang Go语言中怎么优雅的统一返回数据格式(HTTPJSON)
拿 php+laravel 来说。任何地方。抛异常。在 exceptionhandler 里就重写返回就行。
go 里边是咋处理的。也是中间件吗?自带的 http.handler 没有自己造个中间件出来?
中间件处理的话。这样?
interface Result { func Ok():any func Err() Err }
interface Err {func Msg() any func Code() int }
struct xx {
}
func (x *xx) Ok() any {
return “xxx”
}
func (x *xx) Err () Err {
return nil
}
func xx() Result {
return &xx{sdfasfafa}
}
Golang Go语言中怎么优雅的统一返回数据格式(HTTPJSON)
更多关于Golang Go语言中怎么优雅的统一返回数据格式(HTTPJSON)的实战教程也可以访问 https://www.itying.com/category-94-b0.html
PHPer 不是低级的代名词。
建议仔细阅读 https://learnku.com/docs/guide/smart-questions/2032
如果无法解决,可以尝试访问 https://chatgpt.com/
更多关于Golang Go语言中怎么优雅的统一返回数据格式(HTTPJSON)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你都 php+laravel 那为什么 go 不 + gin/fiber/echo 等等都有 middleware ,不然就自己造轮子了。
go 大把的框架+中间件,直接用就行了
可能 go 唯一麻烦的是得一路 return err ,可以考虑自定义一个兼容 error 的接口然后在 middleware 解析出 error_code 和 message
你说对了,要用中间件处理,标准库的路由时没有中间件功能的,要么在自己造,要么用现成的框架。
Echo 框架:
1. 定义一个 errors package:
package errors
import (
“fmt”
“net/http”
“github.com/labstack/echo/v4”
)
func ERROR(err error, c echo.Context) {
code := http.StatusInternalServerError
message := “Internal Server Error”
if he, ok := err.(*echo.HTTPError); ok {
code = he.Code
message = fmt.Sprint(he.Message)
}
_ = c.JSON(code, echo.Map{
“success”: false,
“message”: message,
})
}
2. 将 ERROR 函数指定为 Echo 的统一处理函数:
package main
e := echo.New()
e.HTTPErrorHandler = errors.ERROR
3. 在任意 handler 返回 err:
func (h *Handler) createCluster(c echo.Context) error {
payload := &ClusterPayload{}
err := c.Bind(payload)
if err != nil {
return echo.NewHTTPError( http.StatusBadRequest, err.Error())
}
if err := payload.validate(); err != nil {
return echo.NewHTTPError( http.StatusBadRequest, err.Error())
}
cluster, err := h.service.CreateCluster(c.Request().Context(), payload)
if ent.IsConstraintError(err) {
return echo.NewHTTPError( http.StatusBadRequest, err.Error())
}
if err != nil {
fmt.Println(err)
return echo.ErrInternalServerError
}
return c.JSON( http.StatusOK, echo.Map{
“success”: true,
“data”: cluster,
})
}
虽然我喜欢 V2EX ,打算以后再也不在评论区贴代码了,垃圾。
评论区没格式吗
<br>if err != nil {<br> fmt.Println(err)<br> return echo.ErrInternalServerError<br>}<br>
哈哈哈哈哈哈
#6
#7
可能是担心影响阅读吧。比如万一有人发一堆 # (h1)
在Golang中,统一返回HTTP JSON格式的数据是一种常见的做法,它有助于提升API的可维护性和易用性。以下是一些建议,帮助你优雅地实现这一目标:
-
定义统一的响应结构: 创建一个通用的响应结构体,包含如状态码、消息和数据等字段。例如:
type Response struct { Code int `json:"code"` Message string `json:"message"` Data interface{} `json:"data,omitempty"` }
-
编写辅助函数: 编写一个辅助函数,用于快速创建和返回上述响应结构体的实例。例如:
func SuccessResponse(data interface{}) Response { return Response{Code: 200, Message: "Success", Data: data} } func ErrorResponse(code int, message string) Response { return Response{Code: code, Message: message} }
-
在控制器或处理器中使用: 在你的HTTP处理器中使用这些辅助函数来生成响应。例如:
func GetDataHandler(w http.ResponseWriter, r *http.Request) { data := map[string]string{"key": "value"} response := SuccessResponse(data) json.NewEncoder(w).Encode(response) }
-
处理错误: 在发生错误时,使用
ErrorResponse
函数生成响应,并设置相应的HTTP状态码。
通过以上步骤,你可以轻松地在Golang项目中实现统一的HTTP JSON返回格式,从而提升API的一致性和可读性。