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の便利なラッパーです。Tickは、Tickerをシャットダウンする必要がないクライアントには役立ちますが、Tickをシャットダウンする方法がないと、基になる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 に答える