Warum werden bei diesem einfachen Webserver gerade Zeiten gedruckt?
In dieser Go-Programmierübung soll ein einfacher Webserver zählen und anzeigen wie oft es aufgerufen wurde. Beim Aktualisieren der Seite scheinen sich die gedruckten Werte jedoch nur um gerade Zahlen zu erhöhen (z. B. 1, 3, 5...).
Die Reihenfolge von Funktionsaufrufen verstehen
Jede eingehende HTTP-Anfrage löst einen Aufruf der angegebenen Handler-Funktion (in diesem Fall HelloWorld) aus. Unter der Haube stellt der Browser jedoch zusätzliche Anfragen nach Ressourcen, einschließlich /favicon.ico.
Da der Server nicht so programmiert ist, dass er angemessen auf die Favicon-Anfrage reagiert, fordert der Browser sie weiterhin bei jeder Seitenaktualisierung an . Diese zusätzliche Anfrage erhöht den Anrufzähler um eins.
Anpassen der Zählerlogik
Um die Anzahl der Seitenaktualisierungen korrekt zu zählen, muss der Server diese zusätzlichen Anfragen ignorieren. Eine Lösung besteht darin, den Zähler nur zu erhöhen, wenn der Anforderungspfad der Stammpfad („/“) ist.
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) }
Alternativ kann der Server Anforderungen speziell für favicon.ico ausschließen.
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) }
Das obige ist der detaillierte Inhalt vonWarum zeigt mein Simple Go-Webserver nur die Anzahl der geraden Anrufe an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!