package main

import (
"fmt"
"time"
)

func main() {
//创建定时器,2秒后获取
timer := time.NewTimer(time.Second * 2)
//获取当前时间
t1 := time.Now()
//接收通道数据
t2 := <-timer.C

fmt.Println(t1)
fmt.Println(t2)
//结果为(相差两秒):
/*
2019-07-04 13:59:33.7200299 +0800 CST m=+0.022983601
2019-07-04 13:59:35.7206204 +0800 CST m=+2.023574101
*/

timer2 := time.NewTimer(time.Second * 10)
//重置定时器
timer2.Reset(time.Second * 3)
//获取当前时间
t3 := time.Now()
fmt.Println(t3)
t4 := <-timer2.C
//停止定时器
timer2.Stop()
fmt.Println(t4)

//定时执行一个函数
timer3 := time.AfterFunc(time.Second*2, func() {
fmt.Println("2秒函数执行了")
})
timer3.Reset(time.Second * 2)

//延迟主协程的结束
time.Sleep(time.Second * 3)
}

相关函数列表:

NewTimer()创建一个Timer,它会在最少过去时间段d后到期,向其自身的C字段发送当时的时间
AfterFunc()另起一个go程等待时间段d过去,然后调用f。它返回一个Timer,可以通过调用其Stop方法来取消等待和对f的调用。
Reset()使t重新开始计时,(本方法返回后再)等待时间段d过去后到期。如果调用时t还在等待中会返回真;如果t已经到期或者被停止了会返回假。
Stop()停止Timer的执行。如果停止了t会返回真;如果t已经被停止或者过期了会返回假。Stop不会关闭通道t.C,以避免从该通道的读取不正确的成功。