Heim >Backend-Entwicklung >Golang >Warum wird mein Go HandleFunc zweimal pro Browseranfrage ausgelöst?

Warum wird mein Go HandleFunc zweimal pro Browseranfrage ausgelöst?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-26 02:20:09732Durchsuche

Why is my Go HandleFunc Triggered Twice per Browser Request?

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!

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