我们可以使用time.Sleep ,在未来做一些事情。如果我们使用一个无限循环,我们可以重复地做。然而,有一个更好的选择,它被称为time.Ticker。它是为这类操作设计的,见下面的例子。
睡眠
package main
import (
"log"
"time"
)
func main() {
done := make(chan struct{})
defer close(done)
run(done)
}
func run(done <-chan struct{}) {
i := 1
for {
// Do something here
log.Println(i, "done")
i++
if i == 4 {
return
}
select {
case <-done:
return
default:
time.Sleep(time.Second)
log.Println("redo")
}
}
}
计时器
package main
import (
"log"
"time"
)
func main() {
done := make(chan struct{})
defer close(done)
run(done)
}
func run(done <-chan struct{}) {
i := 1
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
// Do something here
log.Println(i, "done")
i++
if i == 4 {
return
}
select {
case <-done:
return
case <-ticker.C:
log.Println("redo")
}
}
}
结果
2020/06/16 21:49:27 1 done
2020/06/16 21:49:28 redo
2020/06/16 21:49:28 2 done
2020/06/16 21:49:29 redo
2020/06/16 21:49:29 3 done