为了账号安全,请及时绑定邮箱和手机立即绑定

运行一个简单的服务器,但计数器似乎增加了 3,为什么?

运行一个简单的服务器,但计数器似乎增加了 3,为什么?

Go
ABOUTYOU 2021-12-20 19:20:51
我这里有这个小服务器。目的是,如果我访问 localhost:8000/* 它应该增加counter1,如果我访问 localhost:8000/count,它应该显示我当前的counter.一个奇怪的事情发生的是,好像我每次访问localhost:8000时,计数器上升由3所以我会去localhost:8000/count和counter将在3,然后我访问localhost:8000,然后localhost:8000/count再次,counter现在是在6.为什么会发生这种情况吗?有什么奇怪的net/http吗?另外,为什么当我刷新时localhost:8000/count,计数 1 乘以 1?该counterFUNC不增加count,但count仍上升-这是为什么?是否也handler被添加到localhost:8000/count路由中?package mainimport (        "fmt"        "log"        "net/http"        "sync")var mu sync.Mutexvar count intfunc main() {        http.HandleFunc("/", handler)        http.HandleFunc("/count", counter)        log.Fatal(http.ListenAndServe("localhost:8000", nil))}// handler echoes the Path component of the requested URL.func handler(w http.ResponseWriter, r *http.Request) {        mu.Lock()        count++        mu.Unlock()        fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path)}// counter echoes the number of calls so far.func counter(w http.ResponseWriter, r *http.Request) {        mu.Lock()        fmt.Fprintf(w, "Count %d\n", count)        mu.Unlock()}
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

额外的请求是您的浏览器试图访问 /favicon.ico

例如,如果您在处理程序函数中将 http.Request 打印到 stdout,您就可以看到这一点。


查看完整回答
反对 回复 2021-12-20
?
largeQ

TA贡献2039条经验 获得超8个赞

问题是您的处理程序正在提供诸如此类的额外静态内容favicon。如果您记录请求,您会看到您的浏览器可能也在请求 /favicon.ico,它被传递给同一个处理程序。


提供静态内容的一种方法是创建您自己的ServeMux:


package main


import (

    "fmt"

    "net/http"

    "strings"

)   


var chttp = http.NewServeMux()


func main() {


    chttp.Handle("/", http.FileServer(http.Dir("./")))


    http.HandleFunc("/", HomeHandler) // homepage

    http.ListenAndServe(":8080", nil)

}   


func HomeHandler(w http.ResponseWriter, r *http.Request) {


    if (strings.Contains(r.URL.Path, ".")) {

        chttp.ServeHTTP(w, r)

    } else {

        fmt.Fprintf(w, "HomeHandler")

    }   


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 275 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号