ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### Timer Timer是一个定时器,代表未来的一个单一事件,你可以告诉Timer你要等待多长时间,它会提供一个channel, 在将来的那个时间那个channel提供了一个时间值. Timer只会响应一次 . ### 实例 ~~~ //创建一个定时器,设置时间为2秒,2秒后timer通道写入2秒后的时间 timer := time.NewTimer(2 * time.Second) fmt.Println("当前时间:", time.Now()) t := <-timer.C //2秒后往timer.C写数据,有数据后可以读取 fmt.Println("hello go") //没有数据前就会堵塞 fmt.Println("2秒后时间:", t) ~~~ ~~~ 当前时间: 2018-05-27 18:56:14.541849366 +0800 CST m=+0.000438558 hello go 2秒后时间: 2018-05-27 18:56:16.542159978 +0800 CST m=+2.000743414 ~~~ ### Timer实现延时功能 ~~~ timer := time.NewTimer(2 * time.Second) <-timer.C fmt.Println("hello go") time.Sleep(time.Second * 2) fmt.Println("hello go") <-time.After(2 * time.Second) //定时2秒,阻塞2秒,2秒后产生一个时间,往channel内写内容 fmt.Println("hello go") ~~~ ~~~ hello go hello go hello go ~~~ ### 停止定时器 定时器要3秒后才会执行,而主协程直接把定时器停止了,所以永远不会执行了 ~~~ timer := time.NewTimer(3 * time.Second) go func() { <-timer.C fmt.Println("子协程可以打印了,因为定时器的时间到") }() timer.Stop() //停止定时器 for { } ~~~ ### 重置定时器 ~~~ timer := time.NewTimer(10 * time.Second) ok := timer.Reset(1 * time.Second) //重新设置为1秒 fmt.Println(ok) <-timer.C fmt.Println("时间到") ~~~