为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 应用程序中的任何位置使用响应编写器 - 中间件

在 golang 应用程序中的任何位置使用响应编写器 - 中间件

Go
慕虎7371278 2022-09-26 14:19:36
我有一个相当复杂的端点,它从相当多的不同文件运行算法。我正在使用http处理程序,如文档中所述:http.Handle("/foo", fooHandler) http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {     fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) })我想在出现错误的情况下编写http响应,但不想必须将编写器向下传递3个函数来实现此目的。如何编写中间件,允许我访问响应编写器并在应用程序中的任何位置返回响应?
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

只是为了在回答中总结我在评论中提到的内容,并附上一些额外的细节。

假设您的处理程序 H 调用 F,F 调用 G,后者调用 J。

首选方法:不要一直传递到 F/G/J。相反,F、G、J 应返回值(包括错误值),并应构建响应并写入 .这使您的代码更加模块化,更易于单独测试,并且更易于重用。ResponseWritererrorHResponseWriter

可测试性很重要;假设您的函数 J 执行了一些可能导致错误的计算。如果它只是返回 ,这很容易测试 - 你所需要的只是J的输入,然后你可以断言你在某些情况下得到了预期的错误。如果不是返回一个,J拿一个,你需要创建一个假的,并验证正确的错误被写入其中。这要复杂得多。errorerrorResponseWriterResponseWriter


查看完整回答
反对 回复 2022-09-26
  • 1 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信