網站首頁 編程語言 正文
定時器1-"*/5 * * * * *"
package main import ( "fmt" "github.com/robfig/cron" ) //主函數 func main() { cron2 := cron.New() //創建一個cron實例 //執行定時任務(每5秒執行一次) err:= cron2.AddFunc("*/5 * * * * *", print5) if err!=nil{ fmt.Println(err) } //啟動/關閉 cron2.Start() defer cron2.Stop() select { //查詢語句,保持程序運行,在這里等同于for{} } } //執行函數 func print5() { fmt.Println("每5s執行一次cron") }
設置說明
┌─────────────second 范圍 (0 - 60)
│ ┌───────────── min (0 - 59)
│ │ ┌────────────── hour (0 - 23)
│ │ │ ┌─────────────── day of month (1 - 31)
│ │ │ │ ┌──────────────── month (1 - 12)
│ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
│ │ │ │ │ │ Saturday)
│ │ │ │ │ │
│ │ │ │ │ │
* * * * * *
星號(*) :表示 cron 表達式能匹配該字段的所有值。如在第5個字段使用星號(month),表示每個月
斜線(/):表示增長間隔,如第2個字段(minutes) 值是 3-59/15,表示每小時的第3分鐘開始執行一次,之后 每隔 15 分鐘執行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 這些時間點執行),這里也可以表示為:3/15
逗號(,):用于枚舉值,如第6個字段值是 MON,WED,FRI,表示 星期一、三、五 執行
連字號(-):表示一個范圍,如第3個字段的值為 9-17 表示 9am 到 5pm 直接每個小時(包括9和17)
問號(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *
定時器2-Timer-Ticker
Timer //時間到了產生一次事件 Ticker //時間到了循環產生事件
Timer-只執行一次
package main import ( "fmt" "time" ) func main() { //創建一個定時器,設置時間為2s,2s后,往time通道寫內容(當前時間) timer := time.NewTimer(2 * time.Second) fmt.Println("當前時間:", time.Now()) //2s后,往timer.C寫數據,有數據后,就可以讀取 t := <-timer.C //channel沒有數據前后阻塞 fmt.Println("t = ", t) }
Ticker-循環執行
package main import ( "fmt" "time" ) //驗證time.NewTimer(),時間到了,只會響應一次 func main() { timer := time.NewTicker(1 * time.Second) for { <-timer.C fmt.Println("時間到") } }
結果:
時間到
時間到
時間到
時間到
Timer延時功能
time.NewTimer(2 * time.Second) //相當于time.Sleep(2 * time.Second) func main() { //延時2s后打印一句話 timer := time.NewTimer(2 * time.Second) <-timer.C fmt.Println("時間到") } func main() { <-time.After(2 * time.Second) //定時2s,阻塞2s, 2s后產生一個事件,往channel寫內容 fmt.Println("時間到") }
停止和重置定時器
ok := timer.Reset(1 * time.Second) //重新設置為1s timer.Stop() //停止定時器
停止:
func main() { timer := time.NewTimer(3 * time.Second) go func() { <-timer.C fmt.Println("子協程可以打印了,因為定時器的時間到") }() timer.Stop() //停止定時器 for { } }
重置:
func main() { timer := time.NewTimer(3 * time.Second) ok := timer.Reset(1 * time.Second) //重新設置為1s fmt.Println("ok = ", ok) <-timer.C fmt.Println("時間到") }
定時器Ticker使用
package main import ( "fmt" "time" ) func main() { ticker := time.NewTicker(1 * time.Second) i := 0 for { <-ticker.C i++ fmt.Println("i = ", i) if i == 5 { ticker.Stop() break } } }
原文鏈接:https://www.cnblogs.com/guyouyin123/p/15772355.html
相關推薦
- 2022-11-11 Navicat?Premium自定義?sql?標簽的創建方式_數據庫其它
- 2022-05-19 關于python中不同函數讀取圖片格式的區別淺析_python
- 2022-11-12 golang?goquery?selector選擇器使用示例大全_Golang
- 2022-02-17 奇怪的小知識 - 如何清空一個數組?在不改變地址的情況下呢?
- 2022-04-22 自定義注解+Spel實現分布式鎖
- 2022-05-15 react底層的四大核心內容架構詳解_React
- 2022-09-21 WPF+SkiaSharp實現自繪拖曳小球_C#教程
- 2022-10-07 C語言順序查找算法介紹及示例_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支