HandleFunc被调用两次

Dha*_*mit 5 go

我在Go中关注一个简单的Web服务器示例.

我插入了一个log语句,以便生成的代码如下所示:

package main

import (
    "io"
    "log"
    "net/http"
)

func hello(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "Hello world!")
    log.Println("hello.")
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", hello)
    http.ListenAndServe(":8000", mux)
}
Run Code Online (Sandbox Code Playgroud)

问题是,无论何时我在Web浏览器中加载端口8000,都会调用此函数两次.这是一个问题,因为我打算在每次访问页面时增加一个计数器.使用此行为,计数器增加两次.OTOH,如果我这样做curl localhost:8000,它只被召唤一次.

我觉得我在这里失踪是件非常愚蠢的事.

Did*_*zia 21

只需记录请求.您将意识到您的浏览器还要求/favicon.ico.

有关更多信息,请参阅https://en.wikipedia.org/wiki/Favicon.


San*_*ago 12

如果您从服务请求很好,但是如果您从浏览器测试并且不是生产意图,您可以在 golang 代码中执行此操作以避免浏览器加载图标:

http.HandleFunc("/favicon.ico", doNothing)
Run Code Online (Sandbox Code Playgroud)

和功能

func doNothing(w http.ResponseWriter, r *http.Request){}
Run Code Online (Sandbox Code Playgroud)

对于投票否定的人:这是有效的,抱歉在不需要 favicon 或其他任何东西的 api 中使用此代码处理它...