time.NewTimer

Go语言的定时器实质是单向通道,time.Timer结构体类型中有一个time.Time类型的单向chan,源码(src/time/time.go)如下

type Timer struct {
    C <-chan Time
    r runtimeTimer
}

实例

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.NewTimer(time.Second * 2) //从创建成功就开始计时了
    fmt.Println("begin")
    time.Sleep(2 * time.Second)
    fmt.Println("sleep end")
    defer t.Stop()
    for {
        <-t.C
        fmt.Println("timer running...")
        // 需要重置Reset 使 t 重新开始计时
        t.Reset(time.Second * 2)
    }
}

cts@cts-pc:~/test/demo$ go run a.go
begin
sleep end
timer running...
timer running...
timer running...

type Timer struct { C <-chan Time r runtimeTimer }

posted @ 2021-02-24 17:24  牧 天  阅读(539)  评论(0)    收藏  举报