我正在阅读 The Go programming Language Book。在第 1 章中,服务器 2 示例:Book 的代码 互斥锁用于防止竞争条件。但是我复制了代码并尝试运行它,但结果不一致。示例中的代码是否错误?
这是我使用代码的方式:
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()
}
当我运行:go run main.go 并访问两个页面 localhost:8000 和 localhost:8000/count
我原以为只有当我访问 / 页面而不是 /count 页面时,计数才会增加,并且它会根据我的刷新次数增加。