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 {}}