我在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
,它只被调用一次。
我觉得我在这里失踪的确很愚蠢。
答案 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中使用此代码来处理它。