Timer
Timer是一个定时器,代表未来的一个单一事件,通过Timer本身提供的管道将事件传递出去,言外之意是只执行一次。
Timer的数据结构如下:
type Timer struct {
C <-chan Time
r runtimeTimer
}
package main
import (
"fmt"
"time"
)
func main() {
// 1.timer基本使用
timer1 := time.NewTimer(2 * time.Second)
t1 := time.Now()
fmt.Printf("当前时间为:%v\n", t1)
// 从定时器拿时间数据
t2 := <-timer1.C
fmt.Printf("定时两秒后:%v\n", t2)
// 2.验证timer只能响应1次
timer2 := time.NewTimer(time.Second)
for {
<-timer2.C
fmt.Println("时间到,当前for循环不再执行")
}
// 3.timer实现延时的功能
//(1)休眠一秒钟
time.Sleep(time.Second)
//(2)定时两秒钟
timer3 := time.NewTimer(2 * time.Second)
<-timer3.C
fmt.Println("定时2秒到")
//(3)延时两秒钟
<-time.After(2*time.Second)
fmt.Println("延时2秒到")
// 4.停止定时器
timer4 := time.NewTimer(2 * time.Second)
go func() {
<-timer4.C
fmt.Println("定时器执行了")
}()
// 停止定时器
b := timer4.Stop()
if b {
fmt.Println("timer4已经停止")
}
// 5.设置定时为三秒钟
timer5 := time.NewTimer(3 * time.Second)
// 重置定时器为一秒钟
timer5.Reset(1 * time.Second)
fmt.Println(time.Now())
fmt.Println(<-timer5.C)
for {
}
}
Ticker
Ticker是周期性定时器,即周期性的触发一个事件,通过Ticker本身提供的管道将事件传递出去,言外之意是可以重复执行。
Ticker的数据结构:
type Ticker struct {
C <-chan Time
r runtimeTimer
}
package main
import (
"fmt"
"time"
)
func main() {
//// 1.无限定时循环
//ticker := time.NewTicker(1 * time.Second)
//defer ticker.Stop()
//for range ticker.C {
// fmt.Println("滴答滴答滴答")
//}
// 2.限定循环次数执行
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
i := 0
// 子协程
go func() {
for {
i++
fmt.Println(<-ticker.C)
if i == 5 {
//停止
ticker.Stop()
}
}
}()
for {}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。