首頁  >  文章  >  後端開發  >  Context.Background() 與 Context.TODO():什麼時候該使用哪一個?

Context.Background() 與 Context.TODO():什麼時候該使用哪一個?

Susan Sarandon
Susan Sarandon原創
2024-11-07 18:18:03390瀏覽

Context.Background() vs Context.TODO(): When Should You Use Which?

Background() 與 TODO():您應該使用哪個上下文?

將程式碼從全域符號包遷移到 go mongo-driver 時,了解適當的context.TODO() 和 context.Background() 的使用至關重要。

Background()

根據文檔, context.Background() 傳回一個非-nil, 空具有下列特徵的上下文:

  • 從未取消
  • 無值
  • 無截止日期

常用在主函數、初始化和測試中。當沒有有意義的上下文可用時, context.Background() 提供後備。

TODO()

context.TODO() 也會傳回非零的空值情境。然而,它的預期用途是當不清楚使用哪個 Context 或上下文尚不可用時。透過使用 context.TODO(),您可以明確記錄您需要一個上下文,但目前沒有特定的上下文。

最佳實踐

  • 優先使用與 HTTP 請求或其他特定於應用程式的場景關聯的上下文。
  • 在沒有明確可用上下文但仍需要指示需要上下文的情況下使用 context.TODO()。
  • 避免在 main、初始化或測試函數之外使用 context.Background()。

範例用法

考慮以下場景,其中HTTP 處理程序需要在特定時間限制內執行MongoDB 查詢:

ctx, cancel := context.WithTimeout(r.Context(), 6 * time.Second)
defer cancel()

// ctx automatically times out after 6 seconds
curs, err := c.Find(ctx, bson.M{"some": "filter"})

在此範例中, context.WithTimeout() 會建立一個派生自請求上下文(r.Context()) 的新上下文。如果 MongoDB 操作超過 6 秒,上下文就會逾時,表示應該取消查詢。

結論

在 context.TODO() 和 context 之間進行選擇。 Background() 是了解特定使用情境並確保為下游函數提供有意義且適當的上下文的問題。

以上是Context.Background() 與 Context.TODO():什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn