我正在学习围棋索绪尔在here,我修改了一点这样的代码,我quit <- 0
前添加一个睡眠(2S),并与i
斐波纳契的产出指数,下面是我的代码:为什么这样去代码输出是这样的?
package main
import "fmt"
import "time"
func fibonacci(c, quit chan int) {
x, y := 0, 1
for {
select {
case c <- x:
x, y = y, x+y
case <-quit:
fmt.Println("quit")
return
}
}
}
func main() {
c := make(chan int)
quit := make(chan int)
go func() {
for i := 0; i < 10; i++ {
fmt.Println(i,<-c) // output index for result clearly
}
time.Sleep(2000*time.Millisecond) // add sleep for result clearly
quit <- 0
}()
fibonacci(c, quit)
}
我立即找到标准输出0-8,但等待2秒输出9,然后“退出”。
我将此代码移到单个go文件并运行它。起初它输出如上所述的0-8,但是在我改变总数(从10到9,8或3,无论什么)后,它会立即输出所有斐波那契数,因为我是例外(当然它在输出后会输出quit
2秒)!
我在浏览器中运行代码(我使用Chrome)它仍然输出第9个延迟,当我将10更改为3时,它立即输出0-2。
所以我很困惑它为什么输出第9个延迟?
更新:我想我知道为什么,因为我的输出窗口太小而无法输出整个结果,但我始终向下滚动显示所有时间,仍然显示第8个。如果我缩小输出窗口,它将立即输出0-9。那么这是本教程的错误吗?