首頁 > 後端開發 > Golang > 主體

如何在 Go 中偵測請求取消?

DDD
發布: 2024-11-07 18:23:02
原創
441 人瀏覽過

How to Detect Request Cancellation in Go?

在 Go 中偵測要求取消

在 Go 中,可以透過多種方式驗證 HTTP 要求是否已取消。提供的程式碼片段嘗試透過檢查從 http.DefaultClient.Do() 傳回的錯誤來檢查取消,但意外地記錄為 false。

Go 1.13 的解

對於 Go 版本 1.13 及更高版本,建議的方法是利用errors.Is 函數。透過此函數,您可以檢查錯誤是否與特定類型匹配,包括 context 套件的錯誤。

// 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 將準確地確定 err 源自已取消的 context,從而確認請求確實被取消。

替代方法

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!