首頁  >  文章  >  後端開發  >  如何在 Go 中可靠地檢查請求取消?

如何在 Go 中可靠地檢查請求取消?

Susan Sarandon
Susan Sarandon原創
2024-11-08 17:29:01694瀏覽

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錯誤。 error.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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn