將程式碼從全域符號包遷移到 go mongo-driver 時,了解適當的context.TODO() 和 context.Background() 的使用至關重要。
Background()
根據文檔, context.Background() 傳回一個非-nil, 空具有下列特徵的上下文:
常用在主函數、初始化和測試中。當沒有有意義的上下文可用時, context.Background() 提供後備。
TODO()
context.TODO() 也會傳回非零的空值情境。然而,它的預期用途是當不清楚使用哪個 Context 或上下文尚不可用時。透過使用 context.TODO(),您可以明確記錄您需要一個上下文,但目前沒有特定的上下文。
最佳實踐
範例用法
考慮以下場景,其中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中文網其他相關文章!