3

我想每隔一段时间打印一些东西。但是我的代码不起作用,它会引发有关死锁的异常。

你能帮我吗?http://play.golang.org/p/pyEoXU-6Ee

func main() {
    c := time.Tick(1 * time.Minute)
    for now := range c {
        fmt.Printf("%v \n", now)
    }
}
4

3 回答 3

2

Play.golang.org 有一些严格的规则来保护它。如果你在本地运行它,它可以工作。

于 2012-04-29T12:07:07.870 回答
0

这在https://play.golang.org/中不起作用的原因是因为time.Tick(...)它是一个脏函数,它只能在以应用程序结束的无限循环中使用(或您不使用的其他用例)不介意泄漏内存)。根据 Golang 文档:

Tick 是 NewTicker 的便捷包装器,仅提供对 ticking 通道的访问。虽然 Tick 对于不需要关闭 Ticker 的客户端很有用,但请注意,如果没有办法关闭它,则底层 Ticker 无法被垃圾收集器恢复;它“泄漏”。与 NewTicker 不同,如果 d <= 0,Tick 将返回 nil。

所以一般最好time.NewTicker(...)改用。参见示例:https ://pkg.go.dev/time#example-NewTicker

于 2021-11-02T17:39:28.527 回答
-2

你可以试试这个

package main

import "time"
import "fmt"

func main() {
    ticker := time.NewTicker(time.Millisecond * 500)
    go func() {
        for t := range ticker.C {
            fmt.Println("Tick at", t)
        }
    }()
    time.Sleep(time.Millisecond * 1500)
    ticker.Stop()
    fmt.Println("Ticker stopped")
}

http://play.golang.org/p/FFDKMuR8_e

于 2016-04-26T23:04:35.603 回答