Golang Echo框架实现API统一返回格式

Golang的Echo框架中,上下文echo.Context是一个接口,可以通过它重写默认的Context.JSON方法来自定义返回格式

首先定义一下接口的格式

type CommonResponse struct {
    Message string      `json:"message"`
    Data    interface{} `json:"data,omitempty"`
}

定义一个Context结构体,继承echo.Context

type Context struct {
    echo.Context
}

重写JSON方法

func (c *Context) JSON(code int, i interface{}) error {
	resp := CommonResponse{
		Message: http.StatusText(code),
		Data:    i,
	}
	return c.Context.JSON(code, resp)
}

然后在中间件中注入自己的Context

func(next echo.HandlerFunc) echo.HandlerFunc {
	return func(c echo.Context) error {
		return next(&Context{Context: c})
	}
}

由于没有新增方法,只是重写了JSON方法,所以无需转换类型就可直接使用

func Hello(c echo.Context) error {
	return c.JSON(http.StatusOK, "Hello")
}