在golang中,我们可以通过time包的Sleep、Ticker、Timer来实现定时效果。
Sleep
先看Sleep如何实现一个定时:
func main() {
var flag chan int
go func() {
for {
time.Sleep(time.Duration(time.Second*5))
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}
}()
<-flag
}
Ticker实现:
func main() {
var flag chan int
ticker := time.NewTicker(time.Duration(time.Second*5))
go func() {
for {
<- ticker.C
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}
}()
<-flag
}
Timer实现:
func main() {
var flag chan int
timer := time.NewTimer(time.Duration(time.Second*5))
go func() {
for {
<- timer.C
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
timer.Reset(time.Duration(time.Second*5))
}
}()
<-flag
}
这其中,Ticker是一种循环的计时器,而Timer时间到期只会运行一次,不会重复执行,除非reset超时时间,一般Timer用来进行超时的处理判断。