ホームページ > バックエンド開発 > Golang > Go でリクエストのキャンセルを検出するにはどうすればよいですか?

Go でリクエストのキャンセルを検出するにはどうすればよいですか?

DDD
リリース: 2024-11-07 18:23:02
オリジナル
540 人が閲覧しました

How to Detect Request Cancellation in Go?

Go でのリクエストのキャンセルの検出

Go では、HTTP リクエストがキャンセルされたかどうかをいくつかの方法で確認できます。提供されたコード スニペットは、http.DefaultClient.Do() から返されたエラーを検査してキャンセルを確認しようとしますが、予期せず false が記録されます。

Go 1.13 のソリューション

Go バージョン 1.13 以降の場合、errors.Is 関数を活用することをお勧めします。この関数を使用すると、コンテキスト パッケージからのエラーなど、エラーが特定のタイプに一致するかどうかを確認できます。

// Create a canceled context
ctx, cancel := context.WithCancel(context.Background())
cancel()

// Create a request with the canceled context
r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil)

// Attempt the request, which will fail immediately due to the canceled context
_, err := http.DefaultClient.Do(r)

// Validate the error's origin using errors.Is
if errors.Is(err, context.Canceled) {
    fmt.Println("Request canceled!")
}
ログイン後にコピー

この場合、errors.Is は、エラーの原因がキャンセルされたコンテキストにあることを正確に判断し、それを確認します。リクエストが実際にキャンセルされたことを確認します。

代替アプローチ

Go 1.13 より前では、grpc.ErrorDesc と context.Err() を組み合わせてキャンセルを確認できます。 :

// Create a canceled context
ctx, cancel := context.WithCancel(context.Background())
cancel()

// Create a request with the canceled context
r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil)

// Attempt the request, which will fail immediately due to the canceled context
_, err := http.DefaultClient.Do(r)

// Check for a canceled context error
if grpc.ErrorDesc(err) == context.Canceled {
    fmt.Println("Request canceled!")
}
ログイン後にコピー

以上がGo でリクエストのキャンセルを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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