处理Go 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

处理http处理程序中的
写入
错误的最佳方法是什么

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等)需要代码修复。