ホームページ > バックエンド開発 > Golang > Go Context — TODO() vs Background() もう混乱する必要はありません。

Go Context — TODO() vs Background() もう混乱する必要はありません。

PHPz
リリース: 2024-09-10 06:33:32
オリジナル
900 人が閲覧しました

Go Context — TODO() vs Background() No more confusing!

Go では、コンテキスト パッケージは、リクエスト スコープの値、キャンセル シグナル、および期限の管理に役立ちます。
コンテキストを開始する 2 つの一般的な方法は、context.TODO() と context.Background() です。
これらは同様に動作しますが、異なる目的を果たします。

context.Background()

context.Background() は、特別な処理 (キャンセルや期限など) が必要ない場合のデフォルトです。
これは、main、init、またはより具体的なコンテキストを必要としない操作を初期化するときによく使用されます。

例:

 func main() {
     ctx := context.Background()
     server := http.Server{Addr: ":8080", BaseContext: func(net.Listener) context.Context {
         return ctx
     }}
     log.Fatal(server.ListenAndServe())
 }
ログイン後にコピー

この例では、context.Background() を使用して HTTP サーバーの基本コンテキストを確立します。

context.TODO()

context.TODO() はプレースホルダーコンテキストです。どのようなコンテキストを提供すればよいかわからない場合、または後でリファクタリングを計画している場合に使用してください。

例:

 func processOrder() {
     ctx := context.TODO() // Placeholder, decision on context pending
     err := db.SaveOrder(ctx, orderData)
     if err != nil {
         log.Println("Failed to save order:", err)
     }
 }
ログイン後にコピー

ここで、context.TODO() は、より具体的なコンテキストが定義されるまで、データベース操作に一時的に使用されます。

主な違い

どちらの関数も空のコンテキストを返しますが、異なる意図を表します。

  • context.Background(): 特別なコンテキスト機能が必要ないことが確信できる場合に使用されます。
  • context.TODO(): 将来の変更を通知する一時的なプレースホルダー コンテキスト。

結論

context.Background():

を使用する場合
  • HTTP サーバーやデータベース接続などのコア サービスを初期化するとき。
  • キャンセル、期限、金額の必要がない場合。

context.TODO():

を使用する場合
  • リファクタリング中、コンテキストがまだ決まっていない場合。
  • 将来の改善が必要な初期段階のコードを実装する場合。

以上がGo Context — TODO() vs Background() もう混乱する必要はありません。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート