首頁 >後端開發 >Golang >為什麼我的 Simple Go Web 伺服器僅顯示偶數呼叫計數?

為什麼我的 Simple Go Web 伺服器僅顯示偶數呼叫計數?

Susan Sarandon
Susan Sarandon原創
2024-12-19 10:00:16824瀏覽

Why Does My Simple Go Web Server Show Only Even-Numbered Call Counts?

為什麼這個簡單的 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn