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!