v1.1.3

快速開始

最後更新


本頁說明如何安裝 go-queue、啟動 Worker 池(Pool)、送出第一個任務,並在期限內關閉佇列。

前置需求


項目需求
Go1.23 以上(go.mod 宣告 go 1.23)
外部相依無,僅使用標準函式庫

安裝


  1. go get github.com/pardnchiu/go-queue

  1. import "github.com/pardnchiu/go-queue/core"

公開 API 位於 core 子套件。此路徑自 v1.1.3 之後的版本起生效;新版標籤發布前請使用 go get github.com/pardnchiu/go-queue@develop。

第一個佇列


  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "time"
  7. "github.com/pardnchiu/go-queue/core"
  8. )
  9. func main() {
  10. q := core.New(&core.Config{Workers: 4})
  11. ctx := context.Background()
  12. if err := q.Start(ctx); err != nil {
  13. log.Fatal(err)
  14. }
  15. for i := range 3 {
  16. id, err := q.Enqueue(ctx, "", func(ctx context.Context) error {
  17. fmt.Println("task", i, "running")
  18. return nil
  19. })
  20. if err != nil {
  21. log.Printf("enqueue: %v", err)
  22. continue
  23. }
  24. fmt.Println("enqueued", id)
  25. }
  26. // 等待佇列排空,最多 10 秒
  27. shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  28. defer cancel()
  29. if err := q.Shutdown(shutdownCtx); err != nil {
  30. log.Printf("shutdown: %v", err)
  31. }
  32. }

執行後每個任務會輸出一行 task.completed 的 slog 紀錄,內容包含任務 ID、Preset 名稱與耗時。

生命週期的三個呼叫


步驟呼叫重點
建立core.New(cfg)cfg 可為 nil;零值欄位套用預設值
啟動q.Start(ctx)啟動 Workers 個 goroutine;ctx 取消時所有執行中任務的 ctx 一併取消
關閉q.Shutdown(ctx)先拒絕新任務,再等待 Worker 排空堆中剩餘任務;ctx 到期時回傳錯誤

Start 之前也能呼叫 Enqueue:任務會暫存在堆中,Start 後依優先權開始執行。

下一步


EN