为什么这个简单的 Web 服务器打印了偶数次?
在这个 Go 编程练习中,一个简单的 Web 服务器被设计来计数和显示它被调用的次数。然而,刷新页面后,打印的值似乎仅增加偶数(例如 1、3、5...)。
理解函数调用的顺序
每个传入的 HTTP 请求都会触发对指定处理函数(本例中为 HelloWorld)的调用。然而,在幕后,浏览器会发出额外的资源请求,包括 /favicon.ico。
由于服务器没有编程来适当响应 favicon 请求,浏览器会在每次页面刷新时继续请求它。此附加请求会将调用计数器加一。
调整计数器逻辑
为了正确计算页面刷新次数,服务器需要忽略这些附加请求。一种解决方案是仅在请求路径为根路径(“/”)时增加计数器。
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
或者,服务器可以排除专门针对 favicon.ico 的请求。
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/favicon.ico" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
以上是为什么我的 Simple Go Web 服务器仅显示偶数调用计数?的详细内容。更多信息请关注PHP中文网其他相关文章!