假设我有一连串的net /
http处理程序,而早期的处理程序以HTTP错误(http.StatusInternalServerError
例如)响应。如何在以下处理程序中检测到此情况,并避免将其他数据发送到客户端?
还是这完全是解决问题的错误方法?
http.ResponseWriter
是一个接口。因此,只需编写一个新实例:
type MyResponseWriter struct {
http.ResponseWriter
WroteHeader bool
}
func (w *MyResponseWriter) Write(b []byte) (int, error) {
w.WroteHeader = true
return w.ResponseWriter.Write(b)
}
func (w *MyResponseWriter) WriteHeader(code int) {
w.WroteHeader = true
w.ResponseWriter.WriteHeader(code)
}
在您的处理程序中:
//...
if w, ok := w.(*MyResponseWriter); ok && w.WroteHeader {
log.Println("Already wrote, skipping")
return
}
编辑: 另一件事要考虑。在大多数情况下,如果您具有处理程序的“链”,则意味着在处理程序内部调用处理程序。所以如果你有类似的东西
type Handler1 struct { http.Handler }
type Handler2 struct { http.Handler }
type Handler3 struct { http.Handler }
var MyHandler http.Handler = Handler1{Handler2{Handler3{h}}}
只要每个那些调用内部处理程序 ,因为他们与做的最后一件事w
和r
,你应该罚款,因为那时w
和r
甚至不会到达内处理。例如
func (h Handler2) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if somethingBadHappened() {
w.WriteHeader(http.StatusInternalServerError)
return
}
h.ServeHTTP(w, r) // Not called if somethingBadHappened().
}
; IsDotNETInstalled ; ; 用法: ; Call IsDotNETInstalled ; Pop $0 ; StrCmp $0 1 found.NETFramework no.NETFramework Function IsDotNETInstalled Push $0 Push $1 Push $2 Push
问题内容: 我希望我的python应用程序能够知道另一侧的套接字何时被删除。有办法吗? 问题答案: 这取决于您所说的“丢弃”。对于TCP套接字,如果另一端通过close()或进程终止来关闭连接,则可以通过读取文件结尾或读取错误来找出错误,通常将errno设置为“对等”由您的操作系统决定。对于python,您将读取长度为零的字符串,否则将导致套接字。尝试从套接字读取或写入时将引发错误。
问题内容: 我有一台故意安装了JDK的计算机。我有一台装有JRE的计算机,用于进行测试。但是,当我在这台计算机上运行一个Java应用程序,然后在另一台计算机上对其进行尝试时,它抱怨说需要JDK。如何检查系统是否以某种方式安装了JDK?注意:相关计算机为Mac。 问题答案: 您可以打开终端,只需键入 这应该向您显示系统上安装的Java的版本(假设您已在系统环境中设置了Java的路径)。 如果还没有,
问题内容: 我下载了封装在zip文件中的proguard,并将其解压缩到硬盘上。我没有以任何方式 安装 它(因为我不知道如何安装)。然后,我将其添加到我的project.properties文件中。然后,我做了一个“导出android应用程序”,完全希望eclipse抱怨它不知道我的proguard安装在哪里,但是没有抱怨。确实,我的密钥库中出现了一个新的apk文件,而我的应用程序的proguar
本文向大家介绍GC中如何判断对象是否需要被回收?相关面试题,主要包含被问及GC中如何判断对象是否需要被回收?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JAVA虚拟机 即使在可达性分析算法中不可达的对象,也并非是“非回收不可”的,这时候它们暂时处于“等待”阶段,要真正宣告一个对象回收,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一
问题内容: 使用控制台,如何确定sidekiq是否已连接到Redis服务器?我希望能够做这样的事情: 问题答案: 您可以使用Sidekiq提供的Redis信息: 从Sidekiq的Sinatra状态应用程序中获取了它。