我正在閱讀《go 程式語言書籍》。在第 1 章,伺服器 2 範例中:書籍程式碼中,互斥體用於防止競爭條件。但是,我複製了程式碼並嘗試運行它,但結果不一致。範例中的程式碼是否錯誤?
這是我使用程式碼的方式:
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 頁面時增加,並且會根據我刷新的次數而增加。
那是因為當你用瀏覽器測試網頁時,大多數時候,瀏覽器也會向http://localhost: 8000/favicon.ico
發送請求。請參閱下面的螢幕截圖:
/favicon.ico
沒有專用的處理程序,它與 /
匹配,因此將由 server.handler
處理。
建議使用其他工具來測試此類演示。例如,curl
:
$ curl 'http://localhost:8000/' $ curl 'http://localhost:8000/count'
以上是Go程式語言書上的範例server2錯了?的詳細內容。更多資訊請關注PHP中文網其他相關文章!