Maison  >  Article  >  développement back-end  >  L'exemple server2 dans le livre du langage de programmation Go est-il erroné ?

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

王林
王林avant
2024-02-05 23:06:08992parcourir

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

main.go

package main

import "book/server"

func main() {
    server.Run()
}

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'

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer