ホームページ  >  記事  >  golangのctxとは何ですか

golangのctxとは何ですか

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2023-06-09 14:34:082721ブラウズ

Golang の

ctx は、標準ライブラリの型である Context の略称で、リクエスト スコープ固有の値、キャンセル信号、期限などのメタデータを「ゴルーチン」間で転送するために使用されます。

golangのctxとは何ですか

このチュートリアルのオペレーティング システム: Windows 10 システム、Go1.20.1 バージョン、Dell G3 コンピューター。

Golang では、ctx は Context の略称で、標準ライブラリの型です。

Context タイプは、リクエスト スコープ固有の値、キャンセル信号、ゴルーチン間の期限などのメタデータを渡すために使用されます。リクエストを作成するときに、ルート コンテキストを作成し、アプリケーション全体の呼び出しチェーンに渡すことができます。リクエストが伝播するにつれて、このコンテキストは他のゴルーチンによってコピーされ、基礎となる通信に使用される可能性があります。

ctx 主な機能は次のとおりです。

  • メタデータの転送: 一部のメタデータ情報 (ユーザー認証トークンなど) を HTTP リクエストの途中で渡して使用する必要があります。ネットワーク呼び出しチェーン、ctx は、このシナリオを実装するための推奨される方法です。

  • 制御フローのタイムアウトとキャンセル: マルチレベル関数のネストされた呼び出しチェーンでは、多くの場合、エラーが呼び出しチェーンの各層に侵入する必要があります。場合によっては、Goroutine と ctx のキャンセルが必要になることもありますこれは、この種の問題を解決するための重要な方法です。

以下は、ctx を使用して goroutine のキャンセルとタイムアウトを制御する方法を示す簡単なサンプル コードです。

func main() {
   ctx, cancel := context.WithCancel(context.Background())
   defer cancel() // 常用结合 defer 安排执行
   go doSomething(ctx)
   time.Sleep(10 * time.Second)
}
func doSomething(ctx context.Context) {
   select {
      case <-time.After(time.Hour):
         fmt.Println("do something")
      case <-ctx.Done():
         fmt.Println("canceled by user:", ctx.Err())
      }
}

サンプル コードでは、`context.WithCancel` を使用して Context を作成し、キャンセル関数 (`cancel()`) を `doSomething` 関数に渡します。 `doSomething` では、`select` を通じて 2 つのチャネルが監視されており、10 秒が経過すると、メインのゴルーチンが `cancel` 関数を実行し、それによって Done シグナルが `ctx` に送信され、これにより `doSomething` のゴルーチンが実行されます。この信号と

以上がgolangのctxとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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