为什么这个代码输出像这样?

时间:2015-05-21 06:53:58

标签: multithreading go

我在https://www.opengl.org/wiki/Multisampling学习Go langue,我修改了这样的小代码,我在quit <- 0之前添加了一个睡眠(2s),并输出了{{1}的斐波那契索引下面是我的代码:

i

我立刻发现stdout输出0-8,但等待2秒输出第9,然后是&#34;退出&#34;。

我将此代码移动到单个go文件并运行它。首先它输出0-8如上所述,但在我改变总数(从10到9,8或3,无论如何)之后,它会立即直接输出所有斐波纳契数,因为我除外(当然它输出{{ 2秒后1}})!

我在浏览器中运行代码(我使用Chrome)它仍然输出第9个延迟,当我将10改为3时,它立即输出0-2。

所以我很困惑为什么会输出第9个延迟?

更新:我想我知道为什么,因为我的输出窗口太小而无法输出整个结果,但我总是向下滚动所有时间它仍然显示为8。如果我缩放输出窗口,它将立即输出0-9。这是本教程的错误吗?

1 个答案:

答案 0 :(得分:0)

我认为这是本教程的错误。如果输出窗口(左下角)太小,它将显示最后一行,因此第9行不会立即显示。

如果我在fmt.Println("foo")之后添加fmt.Println(i,<-c),则不会输出包含foo字符串的最后一行,但会显示第9个斐波纳契。

我在Chrome中捕获了响应,它可以告诉您如何显示结果,包括输出的时间。所以它必须是吞下最后一行的页面错误。 :d

PS:响应如下:

{
   "Errors":"",
   "Events":[
      {
         "Message":"0 0\nfoo\n1 1\nfoo\n2 1\nfoo\n3 2\nfoo\n4 3\nfoo\n5 5\nfoo\n6 8\nfoo\n7 13\nfoo\n8 21\nfoo\n9 34\nfoo\n",
         "Kind":"stdout",
         "Delay":0
      },
      {
         "Message":"quit\n",
         "Kind":"stdout",
         "Delay":2000000000
      }
   ]
}