[英]Best way to handle error from Write call in Go http handler
在http處理程序中處理Write
錯誤的最佳方法是什么。
func hello(w http.ResponseWriter, r *http.Request) {
n, err := w.Write([]byte("hi"))
// how should we handle this error?
}
我想我可以取n並嘗試用剩余的字節再次寫。
此時,您將只看到兩種類型的錯誤:
網絡錯誤( 例如,如果您在嘗試發送數據時客戶端消失了),或
由服務器中的錯誤引起的錯誤( 例如,如果您手動設置Content-Length
,然后嘗試寫入比您聲稱的要多的數據,則將得到ErrContentLength
)。
您可以在net / http / server.go中查看response
類的實現 ,以了解可能從默認ResponseWriter
看到的錯誤。 如何處理這些錯誤?
對於諸如ErrContentLength
錯誤指示服務器中的錯誤,將它們記錄下來似乎是合理的,因為錯誤消息可能有助於修復服務器。
在我看來,簡單地忽略網絡錯誤似乎是合理的,但是如果需要,當然也可以記錄這些錯誤。
Write()
要做的第一件事就是確保已發送標頭。 因此,當您看到Write()
返回的錯誤代碼時,嘗試更改HTTP狀態代碼為時已晚。 鑒於此,似乎不值得嘗試(並且可能是不可能的)通知客戶端出了點問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.