golang中的定时器
- sleep
sleep
这个是系统自己,无法做到定时
- timer
type Timer struct {
C <-chan Time
r runtimeTimer
}
系统向里面写了一个时间,指定定时时长,时间到了以后系统会向c里面写一个时间,需要读出来,需要注意的是这里面系统只操作一次,不能用for循环操作。
timeout...
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
main.main()
F:/go_workspace/JiakaoSystom/tickerAndTimer.go:62 +0x9c
如果需要设置循环的话需要用reset
func main() {
//fmt.Println(time.Now())
//mytime := time.NewTimer(2*time.Second)
//nowtime :=<-mytime.C//系统向里面写了一个时间,指定定时时长,时间到了以后系统会向c里面写一个时间,需要读出来,
//fmt.Println(nowtime)
myticker := time.NewTicker(time.Second)
go func() {
//wg.Add(1)
for {
mytime := <- myticker.C
fmt.Println(mytime)
}
}()
time.Sleep(10*time.Second)
}
- time.after
这是timer的简略版
func After(d Duration) <-chan Time {
return NewTimer(d).C
}
只是把timer中的c放了进去,可以直接读取就行了
- ticker
这个是有周期性触发的,需要配合for使用
package main
import (
"fmt"
"time"
)
func main() {
//fmt.Println(time.Now())
//mytime := time.NewTimer(2*time.Second)
//nowtime :=<-mytime.C//系统向里面写了一个时间,指定定时时长,时间到了以后系统会向c里面写一个时间,需要读出来,
//fmt.Println(nowtime)
myticker := time.NewTicker(time.Second)
go func() {
//wg.Add(1)
for {
mytime := <- myticker.C
fmt.Println(mytime)
}
}()
time.Sleep(10*time.Second)
}