相关疑难解决方法(0)

如何检查错误是否为“超出期限”错误?

我正在发送一个带有 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功能?

go

11
推荐指数
2
解决办法
8332
查看次数

如何检查请求是否被取消

我有这个简单的代码,我尝试检查请求是否被取消.但令人惊讶的是,它打印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

5
推荐指数
2
解决办法
4587
查看次数

标签 统计

go ×2