首页 > 后端开发 > Golang > 正文

如何在 Go 中可靠地检查请求取消?

Susan Sarandon
发布: 2024-11-08 17:29:01
原创
767 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板