0.周期任務(wù)
5秒鐘后執(zhí)行一個(gè)任務(wù)ticker.C是一個(gè)緩沖為1的channel,
ticker:=time.NewTicker(time.Second*5)
go func() {
for _=range ticker.C {
println("test")
}
}()
time.Sleep(time.Minute)
1.倒計(jì)時(shí)
//主線程阻塞
timer1:=time.NewTimer(time.Second*5)
<-timer1.C
println("test")
//主線程不阻塞
timer2 := time.NewTimer(time.Second)
go func() {
//等觸發(fā)時(shí)的信號(hào)
<-timer2.C
fmt.Println("Timer 2 expired")
}()
//由于上面的等待信號(hào)是在新線程中竞慢,所以代碼會(huì)繼續(xù)往下執(zhí)行骑冗,停掉計(jì)時(shí)器
time.Sleep(time.Second*5)
2.高級(jí)倒計(jì)時(shí)
//golang 定時(shí)器拙泽,啟動(dòng)的時(shí)候執(zhí)行一次窖张,以后每天晚上12點(diǎn)執(zhí)行
func startTimer(f func()) {
go func() {
for {
f()
now := time.Now()
// 計(jì)算下一個(gè)零點(diǎn)
next := now.Add(time.Hour * 24)
next = time.Date(next.Year(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location())
t := time.NewTimer(next.Sub(now))
<-t.C
}
}()
}