ホームページ >バックエンド開発 >Golang >Context.TODO() と Context.Background(): MongoDB ドライバーではどちらのコンテキストを使用する必要がありますか?

Context.TODO() と Context.Background(): MongoDB ドライバーではどちらのコンテキストを使用する必要がありますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 10:43:011037ブラウズ

Context.TODO() vs. Context.Background(): Which Context Should You Use in a MongoDB Driver?

Context.TODO() または Context.Background(): 適切なコンテキストの選択

コードを mongo ドライバーに移行するときの決定context.TODO() と context.Background() の間は混乱する可能性があります。どちらも空のコンテキストを返しますが、その使用目的を理解することが重要です。

Context.Background()

context.Background() は空のキャンセル不可能なコンテキストを作成します。価値観や期限はありません。これは通常、初期化、テスト、およびコンテキスト パラメーターが使用できないメイン関数内でトップレベルのコンテキストとして使用されます。

Context.TODO()

context .TODO() も空のコンテキストを作成しますが、どれを使用すればよいか不明な場合に、コンテキストの欠如を文書化するのに役立ちます。適切なコンテキストが使用可能になるまで、プレースホルダーとして機能します。

Context.TODO() を使用する場合

context.TODO() の主な使用例は次のとおりです。利用可能なコンテキストがまだない場合、またはどのコンテキストを使用するかが不明瞭な場合。この関数を使用すると、この状況が静的解析ツールと IDE に明示的に通知されます。

外部ソースからのコンテキストの使用

HTTP などの外部ソースからコンテキストを受信した場合リクエストがある場合は、MongoDB ドライバーでの後続の操作にそのコンテキストを使用することを検討してください。これにより、途中で終了したときにリクエスト コンテキストをキャンセルでき、サーバー リソースを節約できます。

特定の使用例のコンテキストの導出

特定のタイムアウトまたは期限を指定して新しいコンテキストを導出できます。必要に応じて、 context.TODO() または context.Background() から。たとえば、特定の MongoDB クエリに 6 秒のタイムアウトが必要な場合:

ctx, cancel := context.WithTimeout(r.Context(), 6 * time.Second)
defer cancel()
curs, err := c.Find(ctx, bson.M{"some": "filter"})

結論

context.TODO() を使用するか context を使用するかの決定.Background() は、特定のコンテキストの可用性によって異なります。キャンセルとタイムアウトを効果的に処理するには、状況を考慮し、適切なコンテキストを使用することが重要です。

以上がContext.TODO() と Context.Background(): MongoDB ドライバーではどちらのコンテキストを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。