HandleFunc 多次觸發:調查和解決
在Web 伺服器的上下文中,HandleFunc 函數在處理傳入資料方面起著至關重要的作用HTTP 請求。但是,可能出現的常見問題是針對單一請求呼叫該函數兩次。如果您的程式依賴於遞增計數器或根據請求計數執行操作,這種行為可能會特別成問題。
讓我們深入研究所提供的程式碼片段所展示的問題。在 Web 瀏覽器中載入連接埠 8000 後,hello 函數將被呼叫兩次。當使用curl時,這種行為的令人困惑的本質變得很明顯,它只呼叫該函數一次。
在程式碼中設定日誌記錄機制後,您會發現瀏覽器也會要求/favicon.ico。該請求由瀏覽器發起,目的是在選項卡或網址列中顯示代表網站的小圖示或徽標。
問題的解決方案在於確認 favicon 的請求並進行適當處理。以下是滿足此需求的程式碼更新版本:
package main import ( "fmt" "io" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { if r.RequestURI == "/favicon.ico" { w.WriteHeader(http.StatusNotFound) return } io.WriteString(w, "Hello world!") log.Println("hello.") } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) http.ListenAndServe(":8000", mux) }
此修改可確保妥善處理 favicon 請求,從而導致每個網頁請求僅呼叫一次 hello 函數。
以上是為什麼每個瀏覽器請求都會觸發我的 Go HandleFunc 兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!