我创建了一个无限循环来打印“诗人”,但不会在控制台中打印任何内容。
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的新手,请帮助我了解导致此问题的原因。谢谢
答案 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!")
}