如何檢查請求取消
在 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中文網其他相關文章!