提供されたコードでは、ゴルーチン (go func() ステートメント) を利用する関数 Find() を実装しました。 findCicCode() を使用した非同期データの取得。 goroutine からの応答を受信するために 50 ミリ秒のタイムアウトを設定しました。
ただし、タイムアウトを超えると goroutine リークの可能性が懸念されます。さらに、タイムアウトが発生したときに findCicCode() によって行われた HTTP リクエストをキャンセルできるようにしたいと考えています。
Goroutine Leak Prevention
Goroutine リークを処理するには、特定のスコープで作成されたゴルーチンがそのスコープが終了する前に確実に終了されるようにするためには、これが不可欠です。この場合、タイムアウトに達したときに select ステートメント内のゴルーチンをキャンセルすることが重要です。
<code class="go">case <-time.After(50 * time.Millisecond): // Cancel the goroutine to prevent a potential leak close(ch) return "Request timed out", false</code>
HTTP リクエストのキャンセル
次の手順で HTTP リクエストをキャンセルします。 goroutine では、Go 標準ライブラリが提供する context.Context と context.CancelFunc を利用できます:
<code class="go">// Create a context with a timeout of 50 milliseconds ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() // Execute the findCicCode() function within this context data, status := findCicCodeWithContext(ctx) // If the context is canceled (timeout), the HTTP requests will be aborted</code>
以上がGoroutine リークを防止し、タイムアウト以内に HTTP リクエストをキャンセルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。