我正在尝试转换返回响应正文和错误的路由处理程序,而不是直接将其写入响应编写器。然后我想从包装函数发送成功/错误响应。它将帮助我在所有路由的公共位置添加跟踪和指标。为了实现这一目标,我尝试了以下方法:router.HandleFunc(app, "/login", WrapHandler(Login)).Methods("POST")func WrapHandler(handler func(http.ResponseWriter, *http.Request) (interface{}, *types.HandlerErrorResponse)) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { response, errResponse := handler(w, r) sendResponse(r.Context(), w, response, errResponse) }}登录是一个带签名的接口:Login(w http.ResponseWriter, r *http.Request) (*AuthenticationResponse, *types.HandlerErrorResponse)现在,使用这段代码,错误出现在编译中:cannot use Login (type func(http.ResponseWriter, *http.Request) (*AuthenticationResponse, *types.HandlerErrorResponse)) as type func(http.ResponseWriter, *http.Request) (interface {}, *types.HandlerErrorResponse) in argument to WrapHandlerNew但是,为了制作通用包装器,我必须将响应主体作为接口。请让我知道,我怎样才能实现它。
1 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
要使其编译 Login(w http.ResponseWriter, r *http.Request) (*AuthenticationResponse, *types.HandlerErrorResponse)需要Login(w http.ResponseWriter, r *http.Request) (interface{}, *types.HandlerErrorResponse)
不过,我建议您定义一个接口(或使用现有的接口:io.Reader可能就是您想要的)
定义您需要从响应中访问的方法,然后返回该方法。
type GenericBody interface{
Bytes() []byte
}
现在只要你的返回对象实现了这个方法,就可以返回它。但是,函数签名必须包含这个新类型。
- 1 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消