在http处理程序中处理Write
错误的最佳方法是什么。
func hello(w http.ResponseWriter, r *http.Request) {
n, err := w.Write([]byte("hi"))
// how should we handle this error?
}
我想我可以取n并尝试用剩余的字节再次写。
答案 0 :(得分:0)
目前,您只会看到两种类型的错误:
网络错误,(例如,如果客户端在尝试发送数据时不见了),或者
错误(如果您手动设置Content-Length
,然后尝试写入比您声称的更多的数据,则会得到ErrContentLength
)。
您可以查看net/http/server.go中response
类的实现,以了解在默认ResponseWriter
中可能看到的错误。
如何处理这些错误?
对于ErrContentLength
之类的错误指示服务器中的错误,将这些错误记录下来似乎是合理的,因为错误消息可能有助于修复服务器。
在我看来,简单地忽略网络错误似乎很合理,但是如果需要,当然也可以记录这些错误。
Write()
要做的第一件事是确保发送了标头。因此,当您看到Write()
返回的错误代码时,尝试更改HTTP状态代码为时已晚。鉴于此,似乎不值得尝试(并且可能是不可能的)通知客户端出了点问题。