我有一个相当复杂的端点,它从相当多的不同文件运行算法。我正在使用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 应返回值(包括错误值),并应构建响应并写入 .这使您的代码更加模块化,更易于单独测试,并且更易于重用。ResponseWriter
error
H
ResponseWriter
可测试性很重要;假设您的函数 J 执行了一些可能导致错误的计算。如果它只是返回 ,这很容易测试 - 你所需要的只是J的输入,然后你可以断言你在某些情况下得到了预期的错误。如果不是返回一个,J拿一个,你需要创建一个假的,并验证正确的错误被写入其中。这要复杂得多。error
error
ResponseWriter
ResponseWriter
- 1 回答
- 0 关注
- 63 浏览
添加回答
举报
0/150
提交
取消