HandleFunc被调用两次

时间:2015-10-30 09:04:13

标签: go

我在Go中跟随simple web server example

我插入了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)
}

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

我觉得我在这里失踪的确很愚蠢。

3 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:2)

正如Didier所说,您的浏览器正在尝试加载图标。您可以通过将此代码添加到< head>:

来防止这种情况发生
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=">

答案 2 :(得分:1)

如果您从服务请求中可以,但是如果您从浏览器中进行测试,而并非出于生产目的,则可以使用golang代码执行此操作,以避免浏览器加载收藏夹图标

http.HandleFunc("/favicon.ico", doNothing)

函数

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

对于投票否决票的人来说,这是可行的,很抱歉,在不需要favicon或任何其他内容的api中使用此代码来处理它。