当前位置: 首页 > 面试题库 >

Windows中的行为不稳定?

云和同
2023-03-14
问题内容
  Update:  The question title can be misleading.  This was not Go's fault at all.
           See the first comment or the accepted answer.

下面的代码(几乎相同)在Linux下可以计算页面浏览量,但在Windows下可以将页面浏览量提高一倍。

有人能弄清楚为什么吗?

package main

import (
 "fmt"
    "http"
)

func main() {
    println("Running")
    http.HandleFunc("/", makeHomeHandler())
 http.ListenAndServe(":8080", nil)
}

// this version compiles and run OK under the Linux version of Golang
func makeHomeHandler() func(c *http.Conn, r *http.Request) {
    views := 1
    return func(c *http.Conn, r *http.Request) {
     fmt.Fprintf(c, "Counting %s, %d so far.", r.URL.Path[1:], views)
        views++
    }
}

/*
// this version compiles and run OK under the mingw version of Golang
// it uses a different argument type for the handler function,
// but the counter says "1 so far", then "3 so far", "5 so far", and so on.
func makeHomeHandler() func(c http.ResponseWriter, r *http.Request) {
    views := 1
    return func(c http.ResponseWriter, r *http.Request) {
     fmt.Fprintf(c, "Counting %s, %d so far.", r.URL.Path[1:], views)
        views++
    }
}
*/

在Mingw下:

http://localhost:8080/monkeys => Counting monkeys, 1 so far.
http://localhost:8080/monkeys => Counting monkeys, 3 so far.
http://localhost:8080/donkeys => Counting donkeys, 5 so far.

这可能是错误吗?

跟进:

实际上,如果我为另一个页面定义了其他处理程序,例如:

   http.HandleFunc("/test", testPageHandler)

Wich没有闭包,也没有增加任何东西,计数器无论如何都会增加,但是只有+1:

因此,仍然在Mingw的领导下:

http://localhost:8080/monkeys => Counting monkeys, 1 so far.
http://localhost:8080/monkeys => Counting monkeys, 3 so far.
http://localhost:8080/test   => Another handler function that does not increment "views"
http://localhost:8080/donkeys => Counting donkeys, 6 so far.

在Linux下,输出如下所示:

http://localhost:8080/monkeys => Counting monkeys, 1 so far.
http://localhost:8080/monkeys => Counting monkeys, 2 so far.
http://localhost:8080/test   => Another handler function that does not increment "views"
http://localhost:8080/donkeys => Counting donkeys, 3 so far.

问题答案:

我怀疑您看到的行为是由于浏览器为您的页面请求图标,而不是由于Windows / mingw。如果您想知道,我在达尔文使用6g,我的Firefox
3.6也可以在Mac OS X上运行。

为了强调我的怀疑,请尝试将以下内容添加到处理程序函数中:

fmt.Printf("Counting %s, %d so far.\n", r.URL.Path[1:], views)

然后,您可以看到所有到达您的应用程序的请求。刚启动的Firefox对URL http:// localhost:8080 /
chuchichaestli的
一个请求产生了以下输出:

Counting chuchichaestli, 1 so far.
Counting favicon.ico, 2 so far.

因为Firefox还会为您的go页面请求图标。

此外,views即使可能存在多个并发请求,您也不会锁定/同步访问。



 类似资料:
  • 我一直在玩KivyPong教程,了解框架的最新情况,看看是否可以实现一些想法。我已经删除了大部分乒乓球功能,所以我只能在屏幕上显示弹跳球,并添加了一些代码来生成屏幕上的多个弹跳球,在触摸时生成。效果很好。然后,我添加了一些额外的画布说明,因此我将绘制一条线,指示球移动的方向。这就是事情变得奇怪的地方。第一个球的动作就像它应该做的一样,在屏幕上弹跳。但接下来的任何点击都会产生球,球会离开屏幕,随机改

  • 请查看testng.xml并建议 我想运行2个类(下面提到),但面临一些挑战,因为它在下面提到的2个场景下显示了一些不稳定的行为。 这些测试类下的方法具有组和优先级 **目标是使用组运行这些测试 Scenario1:当我使用Threadcount=1时; [test name=“autopracticee”parallel=“classes”thread-count=“1”] 以下是行为: 1.1

  • 我发现,正好可以做到这一点,只要我将与任何。下面是一个例子: 比较种子向量中0.5以外的两种概率: 比较seed vector,prob=0.5和prob!=0.5: 第二种情况:0.5是向量中引用的第二个概率 同样,我发现尽管和使用了值,但这种模式仍然有效。有人能给我解释一下这个谜吗?这造成了一个很大的问题,因为本应相同的结果却出现了不同,因为在时,种子的使用/计算方式不同,但在其他情况下没有。

  • 我从geofabrik.de下载了我国家的OSM数据,成功地将其导入到安装在Ubuntu 16.04上的PostgreSQL 9.6中,并使用了几次。我还创建了Web应用程序,它可以正常工作。所以我决定添加另一个功能,从一些点返回最近的特殊点(例如餐馆)。对于一个最近的点,它可以工作,但是当我想要返回它们的数组时,它不工作。于是我分解了自己的问题,发现了奇怪的行为。当我执行以下查询: 它返回: 当

  • 问题内容: 我在我的网站上使用Google Webfonts服务,并且在很大程度上依赖它。它在大多数浏览器上都能正常显示,但是在Windows上的Chrome中,显示效果尤其糟糕。非常断断续续和像素化。 到目前为止,我发现Chrome需要先加载.svg格式的字体。但是,我使用的字体称为Asap,仅在.woff中可用。我使用免费的在线服务将其转换为.svg,但是当我将其添加到样式表中(.woff之前

  • 我是ignite的新手,并尝试使用示例https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/client/clientputgetexample.java null