Heim >Backend-Entwicklung >Golang >Warum wird mein Go HandleFunc zweimal pro Browseranfrage ausgelöst?
HandleFunc mehrfach ausgelöst: Untersuchung und Lösung
Im Kontext eines Webservers spielt die HandleFunc-Funktion eine entscheidende Rolle bei der Verarbeitung eingehender Daten HTTP-Anfragen. Ein häufiges Problem kann jedoch darin bestehen, dass die Funktion für eine einzelne Anfrage zweimal aufgerufen wird. Dieses Verhalten kann besonders problematisch sein, wenn Ihr Programm darauf angewiesen ist, einen Zähler zu erhöhen oder Aktionen basierend auf der Anzahl der Anfragen auszuführen.
Sehen wir uns das Problem genauer an, das im bereitgestellten Codeausschnitt dargestellt wird. Beim Laden von Port 8000 in einem Webbrowser wird die Hallo-Funktion zweimal aufgerufen. Die verwirrende Natur dieses Verhaltens wird deutlich, wenn Sie Curl verwenden, das die Funktion nur einmal aufruft.
Beim Einrichten eines Protokollierungsmechanismus im Code werden Sie feststellen, dass der Browser auch /favicon.ico anfordert. Diese Anfrage wird vom Browser initiiert, um ein kleines Symbol oder Logo anzuzeigen, das die Website im Tab oder in der Adressleiste darstellt.
Die Lösung des Problems besteht darin, die Anfrage nach dem Favicon zu bestätigen und entsprechend zu behandeln. Hier ist eine aktualisierte Version des Codes, die diesem Bedarf gerecht wird:
package main import ( "fmt" "io" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { if r.RequestURI == "/favicon.ico" { w.WriteHeader(http.StatusNotFound) return } io.WriteString(w, "Hello world!") log.Println("hello.") } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) http.ListenAndServe(":8000", mux) }
Diese Änderung stellt sicher, dass die Favicon-Anfrage ordnungsgemäß behandelt wird, was dazu führt, dass die Hello-Funktion nur einmal für jede Webseitenanfrage aufgerufen wird.
Das obige ist der detaillierte Inhalt vonWarum wird mein Go HandleFunc zweimal pro Browseranfrage ausgelöst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!