我正在发送一个带有 10 秒超时指定的上下文的请求:
ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()
_, err := client.SendRequest(ctx)
if err != nil {
return 0, err
}
Run Code Online (Sandbox Code Playgroud)
现在,当我达到超时时,错误消息令人困惑:
超出上下文截止日期
是否可以检查 err 是否是超时错误,以便我可以打印更好的错误消息?
ctx, cancel := context.WithTimeout(context.Background(), time.Second * 10)
defer cancel()
_, err := client.SendRequest(ctx)
if err != nil {
if isTimeoutError(err) {
return nil, fmt.Errorf("the request is timeout after 10 seconds")
}
return nil, err
}
Run Code Online (Sandbox Code Playgroud)
如何实现这样的isTimeoutError功能?
我有这个简单的代码,我尝试检查请求是否被取消.但令人惊讶的是,它打印false而不是true去1.9.
我想知道检查它的正确方法是什么?
package main
import (
"context"
"log"
"net/http"
)
func main() {
r, _ := http.NewRequest("GET", "http://example.com", nil)
ctx, cancel := context.WithCancel(context.Background())
r = r.WithContext(ctx)
ch := make(chan bool)
go func() {
_, err := http.DefaultClient.Do(r)
log.Println(err == context.Canceled)
ch <- true
}()
cancel()
<-ch
}
Run Code Online (Sandbox Code Playgroud) go ×2