リクエストのキャンセルを確認する方法
Go では、プログラマーはリクエストがキャンセルされたかどうかを確認する必要があるシナリオに遭遇することがあります。ただし、Go 1.9 以前で == context.Canceled 比較を使用すると、予期しない結果が生じる可能性があります。
リクエストのキャンセルを正確に確認するには、次のアプローチを検討してください。
1. context.Canceled エラー オブジェクトを利用する:
Go 1.13 以降では、context.Canceled エラー オブジェクトはキャンセルを検証する便利な方法を提供します。コンテキストがキャンセルされると、コンテキストに対して実行される操作によってこのエラーが返されます。次のコードはその使用法を示しています:
// Create a context that is already canceled ctx, cancel := context.WithCancel(context.Background()) cancel() // Create the request with it and perform an operation r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil) _, err := http.DefaultClient.Do(r) // Check if the error matches context.Canceled if err == context.Canceled { // Request was canceled }
2. errors.Is 関数を使用します:
1.13 より前の Go バージョンをサポートする必要がある場合は、errors.Is 関数を使用して、ネストされた context.Canceled エラーを確認できます。 errors.Is を使用すると、基礎となるエラー チェーンを検査し、指定されたエラー タイプに一致するエラーがあるかどうかを判断できます。
// Create a context that is already canceled ctx, cancel := context.WithCancel(context.Background()) cancel() // Create the request with it and perform an operation r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil) _, err := http.DefaultClient.Do(r) // Check if the error chain contains context.Canceled if errors.Is(err, context.Canceled) { // Request was canceled }
以上がGo でリクエストのキャンセルを確実に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。