定时器通道 - 在循环

时间:2016-10-27 10:17:30

标签: go timer

我创建了一个无限循环来打印“诗人”,但不会在控制台中打印任何内容。

func main() {
    t := time.NewTimer(1 * time.Minute)
    for {
        k:=<-t.C
        fmt.Print("%T",k)
        fmt.Println("poet")
    }
}

不知何故,当我删除以下两行时,程序运行正常

k:=<-t.C
fmt.Print("%T",k)

我是Golang的新手,请帮助我了解导致此问题的原因。谢谢

2 个答案:

答案 0 :(得分:2)

计时器类型代表单一事件, 所以当它发生在这里 的 k:=<-t.C 你得到了死锁 - 因为所有的例程都是睡着的,你永远不会在循环中得到另一个时间值。

以下是使用Timer的示例,也许你想改用Ticker?

func main() {
    timer := time.NewTimer(time.Second * 2)
    <- timer.C
    println("Timer expired")
}

答案 1 :(得分:0)

这将打印'诗人',直到时间到期。

package main
import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    timeElapsed := true
    for timeElapsed {
        fmt.Println("poet")
        timeElapsed = (time.Since(now) < (1 * time.Second))
    }
    fmt.Println("Times up!")
}