Timer

Timer是一个定时器,代表将来的一个繁多事件,通过Timer自身提供的管道将事件传递进来,话中有话是只执行一次。

Timer的数据结构如下:

type Timer struct {    C <-chan Time    r runtimeTimer}
package mainimport (    "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 mainimport (    "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 {}}