主要目的是对 echo 返回数据全局统一,如:
{
"code": 200,
"data": [],
"msg: "ok
}
由于考虑项目后面维护不想当统一格式发生改变时每个方法都需要修改一次,目前暂时解决方案是利用中间件:
type CustomCtx struct {
echo.Context
}
type RspFormat struct {
ctx echo.Context `json:"-"`
C int `json:"code"`
D interface{} `json:"data"`
M string `json:"msg"`
}
func (ctx CustomCtx) Rsp(status int) *RspFormat {
return &RspFormat{
ctx: ctx,
C: status,
}
}
func (rsp RspFormat) Data(i interface{}) *RspFormat {
rsp.D = i
return &rsp
}
func (rsp RspFormat) Msg(msg string) *RspFormat {
rsp.M = msg
return &rsp
}
func (rsp RspFormat) Do() errors {
return rsp.ctx.JSON(rsp.Code, rsp)
}
e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
return next(CustomCtx{c})
}
})
e.Add("GET", "/", func(c echo.Context) errors {
return c.(CustomCtx).Rsp(200).Msg("Success").Data("data!").Do()
})
有没有更好的方式解决全局统一格式的问题?比如重写 Response.Write 这些?爬墙爬怕了……
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.