time.Timer
Timer 是一个定时器。代表未来的一个单一事件,你可以告诉timer你要等待多长时间。
type Timer struct {
C <-chan Time
r runtimeTimer
}
它提供一个channel,在定时时间到达之前,没有数据写入timer.C 会一直阻塞。直到定时时间到,系统会自动向 timer.C 这个channel 中写入当前事件,阻塞即被解除。
代码示例:
func main() {
fmt.Println("当前时间:", time.Now())
// 创建定时器
myTimer := time.NewTimer(time.Second * 2)
nowTime := <-myTimer.C
fmt.Println("现下时间:", nowTime)
}
3种定时方法
// 3种定时方法
func main() {
fmt.Println("当前时间:", time.Now())
// 1. sleep
time.Sleep(time.Second * 1)
// 2 Timer.C
myTimer := time.NewTimer(time.Second * 2)
nowTime := <-myTimer.C
fmt.Println("现下时间:", nowTime)
// 3. time.After
nowTime = <-time.After(time.Second * 2)
fmt.Println("现下时间:", nowTime)
}
定时器的重置与停止
func main() {
// 创建定时器
myTimer := time.NewTimer(time.Second * 10)
// 重置定时时长为1
myTimer.Reset(1 * time.Second)
go func() {
<-myTimer.C
fmt.Println("子go程定时完毕")
}()
// 设置定时器终止
//myTimer.Stop()
for {
;
}
}
定时器周期定时
func main() {
fmt.Println("now:", time.Now())
myTicker := time.NewTicker(time.Second)
go func() {
for {
nowTime := <-myTicker.C
fmt.Println("nowTime:", nowTime)
}
}()
for {
}
}