在簡單的Go HTTP 程式中編寫多個標頭
Go 的net/http 套件中的一個常見問題是遇到錯誤「multiple response. WriteHeader 呼叫。」當多個標頭寫入同一個HTTP 回應時,就會發生這種情況。
考慮以下程式碼片段:
在 Chrome 中透過 localhost:5678 運作和存取時,控制台顯示:
多個標頭的原因編寫
此錯誤的關鍵在於用作請求處理程序的匿名函數:
此函數列印URL,產生一個呼叫HandleIndex() 的新goroutine ,並繼續執行。如果處理函數在第一次 Write 呼叫之前未設定回應狀態,Go 會自動將其設為 200 (HTTP OK)。但是,如果處理程序完成後沒有寫入回應,Go 仍會將狀態設為 200。
在這種情況下,匿名函數不會設定狀態且不寫入任何內容,因此 Go 將狀態設為 200。
Goroutine 和多頭寫入
當呼叫 HandleIndex() 時一個單獨的 goroutine,原始匿名函數完成並設定回應頭。同時,新的 goroutine 也設定了 header,導致錯誤。
解決方案
要解決此錯誤,請刪除 go 關鍵字以在其中呼叫 HandleIndex()原始 goroutine 或在匿名函數中明確設定回應狀態。
以上是為什麼我的Go HTTP程式顯示「http:多個response.WriteHeader呼叫」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!