スレッド安全性の面でティッカーを作成する場所はどこですか?
ticker := time.NewTicker(1 * time.Second)
go func() {
for _ = range ticker.C {
fmt.Print("Tick")
}
}()
time.Sleep(3)
ticker.Stop()
と
var ticker *time.Ticker
go func() {
ticker = time.NewTicker(1 * time.Second)
for _ = range ticker.C {
fmt.Print("Tick")
}
}()
time.Sleep(3)
ticker.Stop()
の間に違いは、関数内の仕事はダニの期間よりも長くかかる場合は特に、ありますか? (必要とされていないティッカーを停止する場合)前者はできませんが、後者は
go func() {
for ticker := time.NewTicker(1 * time.Second) ;; <-ticker.C {
fmt.Print("Tick")
}
}()
に短縮することができますので、私は求めています
。このフォームには、最初のティックがすぐにトリガーされるという追加の利点があります。
実際には違いはありません。しかし、ゴルーチンへのパラメータとして、囲みスコープから必要な変数を渡すことをお勧めします。 –