推薦 Go 語言中的兩個(gè)定時(shí)任務(wù)庫
今天給大家介紹兩個(gè) Go 語言可以用來做定時(shí)任務(wù)的庫,直接上 demo 就好啦。
?1.?robfig/cron
執(zhí)行如下命令進(jìn)行安裝:
go?get?-u?github.com/robfig/cron
每分鐘執(zhí)行一次:
package?main
import?(
????"log"
????"github.com/robfig/cron"
)
func?main()?{
????i?:=?0
????c?:=?cron.New()
????spec?:=?"0?*/1?*?*?*?*"
????c.AddFunc(spec,?func()?{
????????i++
????????log.Println("execute?per?second",?i)
????})
????c.Start()
????select?{}
}
其中注意select的用法:
golang 的 select 的功能和 select, poll, epoll 相似, 就是監(jiān)聽 IO 操作,當(dāng) IO 操作發(fā)生時(shí),觸發(fā)相應(yīng)的動(dòng)作。
每天上午9點(diǎn)到12點(diǎn)的第2和第10分鐘執(zhí)行:
package?main
import?(
????"fmt"
????"github.com/robfig/cron"
)
func?main()?{
????spec?:=?"2,10?9-12?*?*?*"?//?每天上午9點(diǎn)到12點(diǎn)的第2和第10分鐘執(zhí)行
????c?:=?cron.New()
????c.AddFunc(spec,?myFunc)
????c.Start()
????select?{}
}
func?myFunc()?{
????fmt.Println("execute")
}
2.??jasonlvhit/gocron
執(zhí)行如下命令進(jìn)行安裝:
go?get?-u?github.com/jasonlvhit/gocron
每隔1秒執(zhí)行一個(gè)任務(wù),每隔4秒執(zhí)行另一個(gè)任務(wù):
package?main
import?(
????"fmt"
????"time"
????"github.com/jasonlvhit/gocron"
)
func?task()?{
????fmt.Println("I?am?runnning?task.",?time.Now())
}
func?superWang()?{
????fmt.Println("I?am?runnning?superWang.",?time.Now())
}
func?main()?{
????s?:=?gocron.NewScheduler()
????s.Every(1).Seconds().Do(task)
????s.Every(4).Seconds().Do(superWang)
????sc?:=?s.Start()?//?keep?the?channel
????go?test(s,?sc)??//?wait
????<-sc????????????//?it?will?happens?if?the?channel?is?closed
}
func?test(s?*gocron.Scheduler,?sc?chan?bool)?{
????time.Sleep(8?*?time.Second)
????s.Remove(task)?//remove?task
????time.Sleep(8?*?time.Second)
????s.Clear()
????fmt.Println("All?task?removed")
????close(sc)?//?close?the?channel
}
? ?

喜歡明哥文章的同學(xué)歡迎長按下圖訂閱!
???
評(píng)論
圖片
表情
