Lorsque vous utilisez ce serveur Web Go pour compter ses invocations, il imprime des nombres impairs à la place de la séquence attendue de 1, 2, 3... :
package mainimport ( "fmt" "net/http" ) var calls int // HelloWorld print the times being called. func HelloWorld(w http.ResponseWriter, r *http.Request){ calls++ fmt.Fprintf(w, "You've called me %d times", calls) } func main() { fmt.Printf("Started server at http://localhost%v.\n", 5000) http.HandleFunc("/", HelloWorld) http.ListenAndServe(":5000", nil) }
Le comportement observé est dû à la gestion du fichier favicon.ico par le navigateur. Lorsqu'une page Web est chargée, le navigateur demande ce fichier, qui est une icône de site Web standard. Étant donné que le serveur Web fourni par le code donné ne sert pas de favicon.ico valide, le navigateur le demande à plusieurs reprises.
Comme chaque requête compte comme une invocation du gestionnaire HelloWorld, le nombre d'appels augmente même lorsque l'utilisateur ne rafraîchit la page qu'une seule fois. Les requêtes favicon.ico sont prises en sandwich entre les invocations de l'URL racine ("/") gérées par la fonction HelloWorld, ce qui entraîne une séquence de numéros impairs.
Pour éviter cela, vous pouvez vérifier le chemin de la requête dans HelloWorld. fonction et ignorer les requêtes pour favicon.ico :
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) }
Cette modification garantit que le nombre d'appels s'incrémente uniquement pour les requêtes adressées à l'URL racine. Alternativement, on pourrait désactiver complètement les requêtes favicon.ico dans la configuration du serveur Web.
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!