栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么将此简单的Web服务器称为偶数次?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么将此简单的Web服务器称为偶数次?

这是因为每个传入请求都被路由到您的

HelloWorld()
处理函数,并且浏览器在后台进行了多次调用,尤其是
/favicon.ico

并且由于您的Web服务器没有发送回有效的网站图标,因此当您在浏览器中刷新页面时,它将再次请求它。

在Chrome上尝试:打开开发人员工具(

CTRL+SHIFT+I
),然后选择“网络”标签。点击刷新,您将看到2个新条目:

Name          Status   Type--------------------------------------------------------localhost     200      documentfavicon.ico   200      text/plain

由于您的计数器以

0
(类型的默认值
int
)开头,因此您只需将其递增一次,然后发送回即可
1
。然后,请求
favicon.ico
再次将其递增(
2
),但不显示结果。然后,如果您刷新,它将再次增加到,
3
然后将其发送回,依此类推。

另请注意,多个goroutine可以同时处理请求,因此您的解决方案会遇到麻烦。您应该同步对

calls
变量的访问,或者使用
sync/atomic
软件包安全地增加计数器,例如:

var calls int64func HelloWorld(w http.ResponseWriter, r *http.Request) {    count := atomic.AddInt64(&calls, 1)    fmt.Fprintf(w, "You've called me %d times", count)}

一个简单的“修复”来实现您想要的,将是检查请求路径,如果它不是root

"/"
,请不要增加,例如:

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
,例如:

if r.URL.Path == "/favicon.ico" {    return}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447938.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号