コンテキスト パッケージは、Golang 関数同時プログラミングでコルーチンの実行を管理するために使用され、キャンセル信号を伝播し、タスクが完了する前にコルーチンが他のコルーチンに割り込むことができるようにする機能を提供します。期限を設定します。期限内にコルーチンが完了しない場合、自動的にキャンセルされます。追加情報を渡して、コルーチン間でキーと値のペアを渡すことができるようにします。
Golang 関数同時プログラミングにおけるコンテキストの役割
context
パッケージは Golang での管理に使用されます関数を同時実行するための重要なツール。これにより、コルーチン間でリクエストのキャンセル信号、期限、その他の関連情報を渡す機能が提供されます。
関数
コルーチンがキャンセル信号を送信できるようにし、それによってイニシエーターが許可されるようにします。コルーチンは、タスクが完了する前に実行中のコルーチンを中断します。
期限までにコルーチンが完了しない場合、自動的にキャンセルされます。
任意のタイプのキーと値のペアを運ぶことができ、コルーチン間で追加情報を渡すことができます。
の使用
context オブジェクトを作成するには、
context.Background() または # を使用できます。 ## context.WithCancel()
。 <pre class='brush:go;toolbar:false;'>// 创建一个新context,取消信号为默认
ctx := context.Background()
// 创建一个带有取消信号的新context
ctx, cancel := context.WithCancel()</pre>
コルーチンをキャンセルするには、
cancel() 関数を呼び出すだけです。これにより、この context
をリッスンしているすべてのコルーチンにキャンセル信号が送信されます。 <pre class='brush:go;toolbar:false;'>// 取消协程
cancel()</pre>
コルーチンは、
context.Done() チャネルを使用してキャンセル信号をリッスンできます。チャネルが閉じられると、context
がキャンセルされたことを示します。 <pre class='brush:go;toolbar:false;'>// 监听取消信号
select {
case <-ctx.Done():
// 处理取消
}</pre>
HTTP
リクエストをタイムアウトさせる次のコルーチンを考えてみましょう: <pre class='brush:go;toolbar:false;'>func MakeRequest(ctx context.Context, url string) (*http.Response, error) {
// 创建一个带有截止时间的context
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
// 发起HTTP请求
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
return nil, err
}
req = req.WithContext(ctx)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
return resp, nil
}</pre>
この例では:
context
を作成します。
リクエストはこの
context
がキャンセルされて、他のコルーチンがブロックされないようにします。
を使用すると、コルーチンの実行を制御し、リソース リークや不要な待機を回避できます。
以上がGolang 関数の同時プログラミングにおけるコンテキストの役割の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。