コードをグローバル サイン パッケージから go mongo-driver に移行する場合、適切なコンテキストを理解する必要があります。 context.TODO() と context.Background() の使用は重要です。
Background()
ドキュメントによると、context.Background() は非を返します。 -nil、空 次の特性を持つコンテキスト:
一般的に使用されますmain 関数、初期化、テストで。意味のあるコンテキストが利用できない場合、context.Background() はフォールバックを提供します。
TODO()
context.TODO() も非 nil の空を返します。コンテクスト。ただし、その使用目的は、特に、どのコンテキストを使用するか不明な場合、またはコンテキストがまだ利用できない場合に使用されます。 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 中国語 Web サイトの他の関連記事を参照してください。