Heim >Backend-Entwicklung >Golang >Warum zeigt die Anrufzählung meines Go-Webservers nur ungerade Zahlen an?

Warum zeigt die Anrufzählung meines Go-Webservers nur ungerade Zahlen an?

Linda Hamilton
Linda HamiltonOriginal
2024-12-23 04:31:10511Durchsuche

Why Does My Go Web Server's Call Count Show Only Odd Numbers?

Warum die Anrufzählung eines Webservers gerade Zahlen überspringt

Problem

Wenn dieser Go-Webserver zum Zählen seiner Aufrufe verwendet wird, werden stattdessen ungerade Zahlen gedruckt der erwarteten Folge von 1, 2, 3...:

 package mainimport (
  "fmt"
  "net/http"
)

var calls int

// HelloWorld print the times being called.
func HelloWorld(w http.ResponseWriter, r *http.Request){
    calls++
    fmt.Fprintf(w, "You've called me %d times", calls)
}

func main() {
  fmt.Printf("Started server at http://localhost%v.\n", 5000)
  http.HandleFunc("/", HelloWorld)
  http.ListenAndServe(":5000", nil)
}

Lösung

Das beobachtete Verhalten ist auf die Verarbeitung der Datei favicon.ico durch den Browser zurückzuführen. Wenn eine Webseite geladen wird, fordert der Browser diese Datei an, bei der es sich um ein Standard-Website-Symbol handelt. Da der durch den angegebenen Code bereitgestellte Webserver kein gültiges favicon.ico bereitstellt, fordert der Browser es wiederholt an.

Da jede Anfrage als Aufruf des HelloWorld-Handlers zählt, erhöht sich die Anrufanzahl, selbst wenn der Benutzer Aktualisiert die Seite nur einmal. Die favicon.ico-Anfragen werden zwischen Aufrufen der Root-URL („/“) eingeklemmt, die von der HelloWorld-Funktion verarbeitet werden, was zu einer ungeraden Zahlenfolge führt.

Um dies zu verhindern, kann man den Anfragepfad in HelloWorld überprüfen funktionieren und Anfragen für favicon.ico ignorieren:

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)
}

Diese Änderung stellt sicher, dass die Anrufanzahl nur für Anfragen an die Stamm-URL erhöht wird. Alternativ könnte man favicon.ico-Anfragen in der Webserver-Konfiguration ganz deaktivieren.

Das obige ist der detaillierte Inhalt vonWarum zeigt die Anrufzählung meines Go-Webservers nur ungerade Zahlen an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn