【发现一个小问题】golang http client: 配置了Client 对象的 Timeout 就会导致 context.WithTimeout() 模式的超时控制失效

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


我这样初始化了客户端:

var client = http.Client{Timeout:time.Duration(1000) * time.Millisecond,}

然后在 request 创建过程中使用了 context 的 timeout 机制:

timeoutCtx, cancel := context.WithTimeout( context.Background(), time.Duration(2000)*time.Millisecond )
req, err = http.NewRequestWithContext(timeoutCtx, method, url, postBody)
//...
client.Do(req)  // 在这里始终超时。


注释掉 client 初始化时候的 Timeout 后正常。
还未阅读内部源码,暂不明白后续的原理。

posted on 2024-04-30 14:11  ahfuzhang  阅读(78)  评论(0编辑  收藏  举报