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)// Afterch := 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")returncase <-ticker.C:fmt.Println("ticker")}}}(ticker)time.Sleep(5 * time.Second)ch <- struct{}{}close(ch)
}
ticker在我看来就是一个时钟,我规定的时间是多少,那么只要我不关闭ticker那么,他就会周期性的执行。