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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-08 17:29:01773ブラウズ

How to Reliably Check for Request Cancellation in Go?

リクエストのキャンセルを確認する方法

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 サイトの他の関連記事を参照してください。

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