go - 计时器 channel - 在循环内发出标准输出

标签 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 的新手,请帮助我了解导致此问题的原因。谢谢

最佳答案

Timer 类型表示一个单个事件, 所以当它发生在这里 <强> k:=<-t.C 你遇到了死锁 - 因为所有的 go-routines 都在 sleep ,你永远不会在循环内获得另一个时间值。

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

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

关于go - 计时器 channel - 在循环内发出标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40282024/

相关文章:

c++ - 访问 QTimer 的经过秒数?

c# - 计时器和垃圾收集

go - 如何使用 go 从端口 80 无缝地管道/转发到端口 XXXX?

c++ - 线程计时器,中断 sleep (停止它)

go - panic 和断言有什么区别?

Prolog 不进行 XML 解析

java - 当需要多次设置和取消时,如何在 Java 中使用计时器?

javascript - 计时器为 0 时发出警报消息 :0

mysql - 仅在ECS时无法连接到Golang中的RDS mysql

go - Stringer 方法需要值