首頁 > 後端開發 > Golang > 為什麼我的Go HTTP程式顯示「http:多個response.WriteHeader呼叫」?

為什麼我的Go HTTP程式顯示「http:多個response.WriteHeader呼叫」?

Patricia Arquette
發布: 2024-12-09 19:06:23
原創
961 人瀏覽過

Why Does My Go HTTP Program Show

在簡單的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板