Show HN: (NEW update v1.1.0) A lightweight Go Cron package

3 months ago 2

Features

Custom Dependency Timeout

  • Specify timeout via Wait{ID: taskID, Delay: duration}
  • Default timeout is 1 minute when not configured

Dependency Failure Handling Strategy

  • Added Stop and Skip handling modes
    • Stop: Halt entire dependency chain on failure (default)
    • Skip: Skip failed dependency and continue executing current task
  • Configure failure behavior via Wait{ID: taskID, State: Skip}

Examples

// Failure handling strategy taskID, _ := scheduler.Add("@daily", func() error { return processData() }, "Data processing", []Wait{ {ID: taskA, State: Skip}, // Skip if taskA fails, continue execution {ID: taskB, State: Stop}, // Stop if taskB fails (default) }) // Custom timeout + failure strategy combination taskID, _ := scheduler.Add("@daily", func() error { return processData() }, "Data processing", []Wait{ {ID: taskA, Delay: 30 * time.Second, State: Skip}, // Wait 30s, skip on failure {ID: taskB, Delay: 10 * time.Second, State: Stop}, // Wait 10s, stop on failure }) // Legacy version (deprecated in v2.*.*) taskID, _ := scheduler.Add("@daily", func() error { return processData() }, "Data processing", []int64{taskA, taskB})

Refactor

Compatibility Guarantee

  • Legacy code runs without modification
  • Maintains []int64 dependency support (deprecated in v2.*.*)
  • WaitState zero value is Stop, ensuring default behavior unchanged

Deprecation Notice

Features Removed in v2.*.*

  • []int64 format: Migrate to []Wait format for full feature support
    // Old format []int64{taskA, taskB} // New format []Wait{{ID: taskA}, {ID: taskB}}

新增

自定義依賴超時時間

  • 透過 Wait{ID: taskID, Delay: duration} 指定超時時間
  • 未設定時預設超時為 1 分鐘

依賴失敗處理策略

  • 新增 Stop 和 Skip 兩種處理方式
    • Stop: 依賴失敗時停止整個依賴鏈(預設)
    • Skip: 依賴失敗時跳過失敗的依賴,繼續執行當前任務
  • 透過 Wait{ID: taskID, State: Skip} 設定失敗行為

範例

// 失敗處理策略 taskID, _ := scheduler.Add("@daily", func() error { return processData() }, "Data processing", []Wait{ {ID: taskA, State: Skip}, // taskA 失敗時跳過,繼續執行 {ID: taskB, State: Stop}, // taskB 失敗時停止(預設) }) // 自定義超時 + 失敗策略組合 taskID, _ := scheduler.Add("@daily", func() error { return processData() }, "Data processing", []Wait{ {ID: taskA, Delay: 30 * time.Second, State: Skip}, // 等待 30 秒,失敗時跳過 {ID: taskB, Delay: 10 * time.Second, State: Stop}, // 等待 10 秒,失敗時停止 }) // 舊版本(將在 v2.*.* 廢棄) taskID, _ := scheduler.Add("@daily", func() error { return processData() }, "Data processing", []int64{taskA, taskB})

重構

相容性保證

  • 舊版本代碼無需修改即可正常運行
  • 保留 []int64 依賴支援(將在 v2.*.* 廢棄)
  • WaitState 零值為 Stop,確保預設行為不變

棄用預告

將在 v2.*.* 移除的功能

  • []int64 格式:建議遷移至 []Wait 格式以獲得完整功能支援
    // 舊格式 []int64{taskA, taskB} // 新格式 []Wait{{ID: taskA}, {ID: taskB}}
Read Entire Article