timer可以实现一些定时操作,内部也是通过channel实现的
package main
import (
"fmt"
"time"
)
func main() {
// 定义一个timer
timer1 := time.NewTimer(time.Second * 2)
fmt.Printf("timer: %v\n", time.Now())
t1 := <-timer1.C //阻塞直到时间到了
fmt.Printf("t1: %v\n", t1)
// 用sleep进行阻塞操作
timer2 := time.NewTimer(time.Second * 2)
<-timer2.C
fmt.Println("两秒后")
time.Sleep(time.Second * 2)
fmt.Println("再一次两秒后")
//使用time.After()进行阻塞操作
<-time.After(time.Second * 2)
fmt.Println("再再2s后")
//让其他线程的timer停下,主线程并不会停
timer3 := time.NewTimer(time.Second * 2)
go func() {
<-timer3.C
fmt.Println("func")
}()
s := timer3.Stop()
if s {
fmt.Println("stop...")
}
time.Sleep(time.Second * 3)
fmt.Println("main...")
// 使用Reset重新设置timer时间
fmt.Println("berofe")
timer4 := time.NewTimer(time.Second * 5) //原来设置5s
timer4.Reset(time.Second * 1) //重新设置时间,即修改NewTimer的时间
<-timer4.C
fmt.Println("after")
}
timer.C 定义
type Timer struct {
C <-chan Time // 通道类型
r runtimeTimer
}