Maison > développement back-end > Golang > le corps du texte

L'exemple server2 dans le livre du langage de programmation Go est-il erroné ?

王林
Libérer: 2024-02-05 23:06:08
avant
990 Les gens l'ont consulté

Lexemple server2 dans le livre du langage de programmation Go est-il erroné ?

Contenu de la question

Je lis "Go Programming Language Book". Dans le chapitre 1, Exemple de serveur 2 : Book Code, les mutex sont utilisés pour éviter les conditions de concurrence. Cependant, j'ai copié le code et essayé de l'exécuter, mais les résultats étaient incohérents. Le code de l'exemple est-il erroné ?

Voici comment j'utilise le code :

server.go

package server

import (
    "fmt"
    "log"
    "net/http"
    "sync"
)

const (
    port string = ":8000"
)

var count int

var mu sync.mutex

func run() {
    http.handlefunc("/", handler)
    http.handlefunc("/count", counter)
    fmt.printf("server is listening on port: %s\n", port)
    log.fatal(http.listenandserve(port, nil))
}

func handler(w http.responsewriter, r *http.request) {
    mu.lock()
    count++
    mu.unlock()
    fmt.fprintf(w, "url path = %q\n", r.url.path)
}

func counter(w http.responsewriter, r *http.request) {
    mu.lock()
    fmt.fprintf(w, "count = %d\n", count)
    mu.unlock()
}
Copier après la connexion

main.go

package main

import "book/server"

func main() {
    server.Run()
}
Copier après la connexion

Quand je lance : lancez main.go et accédez à deux pages localhost:8000 et localhost:8000/count

  1. Chaque fois que j'actualise la page /count, le décompte est incrémenté. Pourquoi?
  2. Chaque fois que j'actualise les pages / et /count, le nombre affiché augmente de manière incohérente ? Non basé sur le nombre de rafraîchissements. Pourquoi?

Je m'attendais à ce que le nombre n'augmente que lorsque je visite la page / au lieu de la page /count, et qu'il augmente en fonction du nombre de fois que j'actualise.


Bonne réponse


En effet, lorsque vous testez une page Web avec un navigateur, la plupart du temps, le navigateur envoie également une requête à http://localhost:8000/favicon.ico. Voir capture d'écran ci-dessous :

/favicon.ico 没有专用的处理程序,它与 / 匹配,因此将由 server.handlerTraitement.

Il est recommandé d'utiliser d'autres outils pour tester de telles démos. Par exemple, curl :

$ curl 'http://localhost:8000/'
$ curl 'http://localhost:8000/count'
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal