間隔を置いて何かを印刷したい。しかし、私のコードは機能しません。デッドロックに関する例外がスローされます。
手伝ってくれませんか。http://play.golang.org/p/pyEoXU-6Ee
func main() {
c := time.Tick(1 * time.Minute)
for now := range c {
fmt.Printf("%v \n", now)
}
}
間隔を置いて何かを印刷したい。しかし、私のコードは機能しません。デッドロックに関する例外がスローされます。
手伝ってくれませんか。http://play.golang.org/p/pyEoXU-6Ee
func main() {
c := time.Tick(1 * time.Minute)
for now := range c {
fmt.Printf("%v \n", now)
}
}
Play.golang.orgには、それを保護するためのいくつかの厳格なルールがあります。これをローカルで実行すると、機能します。
これが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の例を参照してください
代わりにこれを試すことができます:
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")
}