有什么方式判断是一个request是超时的
以下代码供你参考下
uri := "http://www.google.com/"
client := http.Client{
Timeout: 3 * time.Second,
}
resp, err := client.Get(uri)
if err != nil {
if strings.Contains(err.Error(), "Client.Timeout exceeded") {
fmt.Println("HTTP Get timeout")
}
}
defer resp.Body.Close()
...
可以用如下代码,便于检测超时。
req, err := http.NewRequest("GET", url, nil)
if err != nil {
// TODO:
}
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
isTimeout := func() bool {
select {
default:
return false
case <-ctx.Done():
// 是否超时
return errors.Is(ctx.Err(), context.DeadlineExceeded)
}
}
req = req.WithContext(ctx)
resp, err := http.DefaultClient.Do(req)
if err != nil {
if isTimeout() {
// TODO: 超时处理
}
return
}
defer resp.Body.Close()
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答876 阅读✓ 已解决
2 回答2.2k 阅读
不是很理解你的问题, go是作为服务端还是作为客户端呢, 如果是作为服务端, 没有办法判断, 因为请求超时表示请求就没打到server; go作为客户端发起http请求的话, 可以直接设置请求超时时间, 时间到没有得到响应就是超时了.