ホームページ >バックエンド開発 >Golang >Context.Background() と Context.TODO(): いつどちらを使用する必要がありますか?

Context.Background() と Context.TODO(): いつどちらを使用する必要がありますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-07 18:18:03468ブラウズ

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

Background() と TODO(): どのコンテキストを使用する必要がありますか?

コードをグローバル サイン パッケージから go mongo-driver に移行する場合、適切なコンテキストを理解する必要があります。 context.TODO() と context.Background() の使用は重要です。

Background()

ドキュメントによると、context.Background() は非を返します。 -nil、空 次の特性を持つコンテキスト:

  • キャンセルされない
  • 値なし
  • 期限なし

一般的に使用されますmain 関数、初期化、テストで。意味のあるコンテキストが利用できない場合、context.Background() はフォールバックを提供します。

TODO()

context.TODO() も非 nil の空を返します。コンテクスト。ただし、その使用目的は、特に、どのコンテキストを使用するか不明な場合、またはコンテキストがまだ利用できない場合に使用されます。 context.TODO() を使用すると、コンテキストが必要だが現在特定のコンテキストがないことを明示的に文書化できます。

ベスト プラクティス

  • HTTP リクエストまたはその他のアプリケーション固有のシナリオに関連付けられたコンテキストを使用することを好みます。
  • 利用可能な明確なコンテキストはないが、コンテキストが必要であることを示す必要がある状況では、context.TODO() を使用します。
  • メイン関数、初期化関数、またはテスト関数の外で 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 中国語 Web サイトの他の関連記事を参照してください。

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