HandleFunc 调用两次
在一个简单的 Go Web 服务器示例中,出现了一个令人费解的问题,即通过访问端口 8000 时 HandleFunc 被调用两次网络浏览器。这与使用curl时的预期行为不同,curl仅触发一次调用。
揭示问题
在实现日志记录语句来解决问题后,它变成显然,浏览器对 /favicon.ico 发出了额外的请求。此图标通常显示在浏览器的地址栏中。
解决方案
要解决请求处理中的这种不匹配问题,只需在中确认 /favicon.ico 的请求即可HandleFunc。如果此特定请求不需要执行任何操作,则默认的空响应就足够了。
以下是修改后的代码:
package main import ( "io" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world!") log.Println("hello.") } func favicon(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) mux.HandleFunc("/favicon.ico", favicon) http.ListenAndServe(":8000", mux) }
以上是为什么我的 Go HandleFunc 在通过 Web 浏览器访问时会被调用两次?的详细内容。更多信息请关注PHP中文网其他相关文章!