HandleFunc zweimal aufgerufen
In einem einfachen Go-Webserver-Beispiel tritt ein rätselhaftes Problem auf, bei dem HandleFunc beim Zugriff auf Port 8000 zweimal aufgerufen wird ein Webbrowser. Dies unterscheidet sich vom erwarteten Verhalten bei Verwendung von Curl, das nur einen einzigen Aufruf auslöst.
Enthüllung des Problems
Nach der Implementierung einer Protokollierungsanweisung zur Behebung des Problems wird es Es ist ersichtlich, dass vom Browser eine zusätzliche Anfrage für /favicon.ico gestellt wird. Dieses Symbol wird normalerweise in der Adressleiste des Browsers angezeigt.
Lösung
Um diese Diskrepanz bei der Anfrageverarbeitung zu beheben, bestätigen Sie einfach die Anfrage für /favicon.ico in die HandleFunc. Wenn für diese spezielle Anfrage keine Aktion erforderlich ist, kann eine standardmäßige leere Antwort ausreichen.
Hier ist der geänderte Code:
package main import ( "io" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world!") log.Println("hello.") } func favicon(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) mux.HandleFunc("/favicon.ico", favicon) http.ListenAndServe(":8000", mux) }
Das obige ist der detaillierte Inhalt vonWarum wird mein Go HandleFunc zweimal aufgerufen, wenn über einen Webbrowser darauf zugegriffen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!