如何检查请求取消
在 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中文网其他相关文章!