Maison >développement back-end >Golang >Pourquoi mon serveur Web Simple Go affiche-t-il uniquement le nombre d'appels pairs ?

Pourquoi mon serveur Web Simple Go affiche-t-il uniquement le nombre d'appels pairs ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 10:00:16807parcourir

Why Does My Simple Go Web Server Show Only Even-Numbered Call Counts?

Pourquoi ce serveur Web simple est-il imprimé même fois ?

Dans cet exercice de programmation Go, un simple serveur Web est conçu pour compter et afficher le nombre de fois qu'il a été appelé. Cependant, lors de l'actualisation de la page, les valeurs imprimées semblent s'incrémenter uniquement de nombres pairs (par exemple, 1, 3, 5...).

Comprendre l'ordre des appels de fonction

Chaque requête HTTP entrante déclenche un appel à la fonction de gestionnaire spécifiée (HelloWorld dans ce cas). Cependant, sous le capot, le navigateur effectue des demandes de ressources supplémentaires, notamment /favicon.ico.

Étant donné que le serveur n'est pas programmé pour répondre de manière appropriée à la demande de favicon, le navigateur continue de la demander à chaque actualisation de page. . Cette requête supplémentaire incrémente le compteur d'appels de un.

Ajustement de la logique du compteur

Pour compter correctement le nombre de rafraîchissements de page, le serveur doit ignorer ces requêtes supplémentaires. Une solution consiste à incrémenter le compteur uniquement lorsque le chemin de la requête est la racine ("/").

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)
}

Alternativement, le serveur peut exclure les requêtes spécifiquement pour favicon.ico.

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)
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn