time包中的方法NewTicker可以创建一个*Ticker
Ticker是一个结构体, 其中的字段C是一个channel
创建Ticker时, 根据参数表示的间隔, 向C中存入当前的时间(背后有一个协程执行这个动作)
func main() {
t := time.NewTicker(time.Second)
for v:= range t.C { // 循环channel
fmt.Println("hello", v)
}
}
一次性定时器:
在约定时间到达的时候执行一次
func After(d Duration) <-chan Time // 返回的是一个只读的channel
例: 一个请求在5秒钟内没有响应, 则返回超时
func main() {
task := make(chan int, 10)
// task <- 1 // 测试时, 打开或关闭注释
t := time.After(time.Second*5)
select {
case t := <- task: fmt.Println(t)
case <- t : fmt.Println("请求已超时") // 5秒后才能取到里面的数据(当前时间)
}
}
由于性能问题, 不推荐使用After一次性定时器