為什麼這個簡單的 Web 伺服器印了偶數次?
在這個 Go 程式設計練習中,一個簡單的 Web 伺服器被設計來計數和顯示它被呼叫的次數。然而,刷新頁面後,列印的值似乎僅增加偶數(例如 1、3、5...)。
理解函數呼叫的順序
每個傳入的 HTTP 請求都會觸發指定處理函數(本例中為 HelloWorld)的呼叫。然而,在幕後,瀏覽器會發出額外的資源請求,包括 /favicon.ico。
由於伺服器沒有編程來適當回應 favicon 請求,瀏覽器會在每次頁面刷新時繼續請求它。此附加請求會將呼叫計數器加一。
調整計數器邏輯
為了正確計算頁面刷新次數,伺服器需要忽略這些附加請求。一種解決方案是僅在請求路徑為根路徑(“/”)時增加計數器。
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
或者,伺服器可以排除專門針對 favicon.ico 的請求。
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/favicon.ico" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
以上是為什麼我的 Simple Go Web 伺服器僅顯示偶數呼叫計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!