go timer ticker 定时器
来源:原创
时间:2019-03-11
作者:脚本小站
分类:GoLang
time.NewTimer 只会响应一次:
package main import ( "fmt" "time" ) func main() { // 创建一个定时器,设置时间为2s,时间到了之后往time通道写内容,内容为当前时间 timer := time.NewTimer(2 * time.Second) fmt.Println("当前时间 :", time.Now()) t := <-timer.C // 两秒后就会往通道里写入时间 fmt.Println("定时器时间:", t) }
延时功能:
package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(2 * time.Second) <-timer.C // 时间到了之后阻塞 fmt.Println("时间到了") time.Sleep(2 * time.Second) fmt.Println("时间到了") <-time.After(2 * time.Second) // 阻塞两秒后往channel写内容 fmt.Println("时间到了") }
定时器关闭:
package main import ( "fmt" "time" ) func main() { timer := time.NewTimer(3 * time.Second) // 3s后往timer通道中写时间 go func() { num := <-timer.C // 未读出内容时一直保持死锁 fmt.Println("时间到了", num) }() // 因为主协程和子协程是同时执行的,定时器被关闭后就不会执行了 timer.Stop() for { } }
时间重置:
package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) timer := time.NewTimer(3 * time.Second) timer.Reset(time.Second) // 将时间重置为一秒 t := <-timer.C fmt.Println(t) }
循环事件ticker:
package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(time.Second) // 实现循环事件 for { t := <-ticker.C // 每隔一秒就往管道里输入 fmt.Println(t) } }