作者:张富春(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 后正常。
还未阅读内部源码,暂不明白后续的原理。