处理Go http处理程序中写入调用错误的最佳方法
处理http处理程序中的处理Go http处理程序中写入调用错误的最佳方法,http,go,io,handler,Http,Go,Io,Handler,处理http处理程序中的写入错误的最佳方法是什么 func hello(w http.ResponseWriter,r*http.Request){ n、 错误:=w.Write([]字节(“hi”)) //我们应该如何处理这个错误? } 我想我可以取n,然后尝试用剩余的字节再次写入。此时,您将只看到两种类型的错误: 网络错误(例如,当您尝试发送数据时,客户端离开),或 服务器中的错误导致的错误(例如,如果您手动设置内容长度,然后尝试写入比您声称的更多的数据,您将获得ErrContentLe
写入错误的最佳方法是什么
func hello(w http.ResponseWriter,r*http.Request){
n、 错误:=w.Write([]字节(“hi”))
//我们应该如何处理这个错误?
}
我想我可以取n,然后尝试用剩余的字节再次写入。此时,您将只看到两种类型的错误:
- 网络错误(例如,当您尝试发送数据时,客户端离开),或
- 服务器中的错误导致的错误(例如,如果您手动设置
内容长度
,然后尝试写入比您声称的更多的数据,您将获得ErrContentLength
)
您可以在中查看response
类的实现,了解默认ResponseWriter
中可能出现的错误。
如何处理这些错误
- 对于诸如
ErrContentLength
之类的错误,它们表明服务器中存在错误,因此记录这些错误似乎是合理的,因为错误消息可能有助于修复服务器
- 对我来说,简单地忽略网络错误似乎是合理的,但当然,如果需要的话,这些错误也可以被记录下来
Write()
要做的第一件事就是确保发送头。因此,当您看到Write()
返回的错误代码时,尝试更改HTTP状态代码已经太晚了。鉴于此,似乎不值得尝试(可能是不可能的)通知客户出了问题
@ThunderCat我知道。我的问题是如果我不想忽略此错误,如何处理此错误您可以记录它、返回http服务器错误或忽略它。什么是“最好的”取决于你。@johlo:在这一点上不太可能有暂时的错误。通常有很多层缓冲调用方与实际网络连接。您很可能会看到类似于ErrContentLength
、ErrBodyNotAllowed
、errjacked
,等等的情况。很好的一点是,在大多数情况下,尝试返回服务器错误可能不可行,或者即使是在可行的情况下也不值得付出努力。您可以做的最好是记录错误。网络层的错误通常是因为数据无法发送到对等方。从那以后就再也无法恢复了。指示程序员错误的错误(errjacked、ErrContentLength等)需要代码修复。