net/http 连接池超时控制?
1. 运行环境
Golang版本:1.17
2. 问题描述?
伪代码:
var Client = &http.Client{}
// GetA
func GetA(url string) (response *http.Response, err error) {
req, err := http.NewRequest("GET",url,nil)
if err != nil {
return nil, err
}
return client.Do(req)
}
3. 您期望得到的结果?
在不自行使用 channel/ctx 之类的情况下,实现连接池+超时控制
4. 您实际得到的结果?
试过的方案:
1. (&http.Client{}).Timeout
可以控制 client 无法控制连接池的某个连接
2. http.NewRequestWithContext
通过 ctx 控制失败
如:URL,200毫秒内返回结果(100%),超时设定为1秒,使用 ctx GetA
会随机出现超时情况?