Golang中的timer和ticker
Golang中的timer和ticker
Timer
func AppTimer() {
// st := time.Now()
// // 创建timer,定时2s
// timer := time.NewTimer(2 * time.Second)
// timer.Stop()
// //<-timer.C
// timer.Reset(3 * time.Second)
// <-timer.C
// fmt.Println(time.Since(st))
// AfterFunc函数,在duration后执行f函数
//duration := time.Duration(1) * time.Second
//f := func() {
// fmt.Println("我是小明")
//}
//
//timer := time.AfterFunc(duration, f)
//defer timer.Stop()
//
//time.Sleep(time.Second * 2)
// After
ch := make(chan string)
go func() {
time.Sleep(time.Second * 3)
ch <- "test"
}()
select {
case val := <-ch:
fmt.Println(val)
case <-time.After(time.Second * 3):
fmt.Println("timeout")
}
}
timer主要有创建、重置、停止这三个方法。timer主要作用就是定时去做某件事情。
其中有AfterFunc(duration,func(){})是在duration时间后执行func函数,自己创建一个goroutine去执行,不用自己创建。
After函数是用来判断功能是否超时,返回的是一个只读的通道。
ticker
func AppTicker() {
ticker := time.NewTicker(time.Second * 1)
ch := make(chan struct{})
go func(ticker *time.Ticker) {
defer ticker.Stop()
for {
select {
case <-ch:
fmt.Println("end")
return
case <-ticker.C:
fmt.Println("ticker")
}
}
}(ticker)
time.Sleep(5 * time.Second)
ch <- struct{}{}
close(ch)
}
ticker在我看来就是一个时钟,我规定的时间是多少,那么只要我不关闭ticker那么,他就会周期性的执行。