簡體   English   中英

在Go http處理程序中處理Write調用錯誤的最佳方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM