Go Mongo ドライバーでの Context.TODO() と Context.Background() の移動
Go mongo ドライバーを使用する場合、 context.TODO() をいつ使用するか、context.Background() をいつ使用するかという問題に遭遇するかもしれません。どちらの関数も nil 以外の空のコンテキストを返しますが、適切に使用するには、その目的と違いを理解することが重要です。
Context.Background()
"Context.Background() " は通常、main 関数、初期化ルーチン、およびテストで使用されます。 Go のドキュメントによると、キャンセルされず、値も期限もなく、非 nil の空のコンテキストを返します。その主な目的は、受信リクエストのトップレベルのコンテキストとして機能することです。
Context.TODO()
"Context.TODO()" は、次の場合に使用されます。コンテキストが必要ですが、すぐに利用できるコンテキストが (まだ) なく、どれを使用すればよいかわかりません。 context.TODO() を使用すると、コンテキストがまだ確立されていないことを明確に文書化できます。これは、周囲の関数がコンテキスト パラメーターを受け入れるように拡張されていない場合のプレースホルダーとして機能します。
ベスト プラクティス
利用可能なコンテキストがある場合は、それを優先して使用します。コンテキストを取得したり、そこから新しいコンテキストを導出したりすることができます。これは、HTTP ハンドラーなどのシナリオに当てはまります。HTTP リクエスト http.Request には、Request.Context() 経由でアクセスできるコンテキストがすでに含まれています。
このような状況でリクエスト コンテキストを利用すると、リソースが最適化されます。たとえば、HTTP クライアントがリクエストを放棄した場合、関連付けられた MongoDB クエリをキャンセルして、両方のサーバーの計算時間とメモリを節約できます。
別のシナリオには、MongoDB 操作のタイムアウトの設定が含まれます。タイムアウトを含むコンテキストを導出することで、指定された制限時間を超えた場合に操作を確実にキャンセルできます。これは、後処理に時間がかかるシナリオでの遅延を防ぐのに役立ちます。
結論
コンテキストを初期化するとき、またはコンテキストが初期化するときは、必ず context.Background() を使用してください。期限切れにする必要はありません。コンテキストが必要であるがまだ確立されていない場合は、context.TODO() を使用します。関連するコンテキストが利用可能な場合は、それを優先的に使用します。これらのニュアンスを理解することで、Go mongo ドライバーを使用するときにコンテキストを効果的に管理し、最適なパフォーマンスとリソース使用率を確保できます。
以上がGo Mongo-Driver で `context.TODO()` と `context.Background()` を使用する場合は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。