go timer ticker 定时器
来源:原创
时间:2019-03-11
作者:脚本小站
分类:GoLang
time.NewTimer 只会响应一次:
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个定时器,设置时间为2s,时间到了之后往time通道写内容,内容为当前时间
timer := time.NewTimer(2 * time.Second)
fmt.Println("当前时间 :", time.Now())
t := <-timer.C // 两秒后就会往通道里写入时间
fmt.Println("定时器时间:", t)
}延时功能:
package main
import (
"fmt"
"time"
)
func main() {
timer := time.NewTimer(2 * time.Second)
<-timer.C // 时间到了之后阻塞
fmt.Println("时间到了")
time.Sleep(2 * time.Second)
fmt.Println("时间到了")
<-time.After(2 * time.Second) // 阻塞两秒后往channel写内容
fmt.Println("时间到了")
}定时器关闭:
package main
import (
"fmt"
"time"
)
func main() {
timer := time.NewTimer(3 * time.Second) // 3s后往timer通道中写时间
go func() {
num := <-timer.C // 未读出内容时一直保持死锁
fmt.Println("时间到了", num)
}()
// 因为主协程和子协程是同时执行的,定时器被关闭后就不会执行了
timer.Stop()
for {
}
}时间重置:
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(time.Now())
timer := time.NewTimer(3 * time.Second)
timer.Reset(time.Second) // 将时间重置为一秒
t := <-timer.C
fmt.Println(t)
}循环事件ticker:
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(time.Second) // 实现循环事件
for {
t := <-ticker.C // 每隔一秒就往管道里输入
fmt.Println(t)
}
}