Heim >Backend-Entwicklung >Golang >Warum zeigt die Anrufzählung meines Go-Webservers nur ungerade Zahlen an?
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) }
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!