Gibt es einen Unterschied zwischenIst es wichtig, wo ich den Ticker erstelle?
ticker := time.NewTicker(1 * time.Second)
go func() {
for _ = range ticker.C {
fmt.Print("Tick")
}
}()
time.Sleep(3)
ticker.Stop()
und
var ticker *time.Ticker
go func() {
ticker = time.NewTicker(1 * time.Second)
for _ = range ticker.C {
fmt.Print("Tick")
}
}()
time.Sleep(3)
ticker.Stop()
in Bezug auf Thread-Sicherheit, vor allem, wenn die Arbeit in der Funktion dauert länger als eine Periode des tick?
ich frage, weil sie (wenn die Ticker Anhalten ist nicht erforderlich) diese auf
verkürzt werden kanngo func() {
for ticker := time.NewTicker(1 * time.Second) ;; <-ticker.C {
fmt.Print("Tick")
}
}()
während erstere nicht. Diese Form hat den zusätzlichen Vorteil, dass der erste Tick sofort ausgelöst wird.
Es gibt keinen Unterschied tatsächlich. Es ist jedoch eine gute Methode, die erforderlichen Variablen aus einem umschließenden Gültigkeitsbereich als Parameter an Goroutines zu übergeben. –