两个需求:
对于第一个需求,设置了 client.Transport,并在合适的位置调用其 CancelRequest()接口; 对于第二个需求,设置了 client.Timeout ;
但是调试中发现,如果设置了 client.Timeout,则 Transport.CancelRequest()就不再起效。 注释掉 Timeout 就可以生效。
代码如下:
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
trans := &http.Transport{}
client := &http.Client{
Transport: trans,
Timeout: time.Second * (30), // 这一行不注释就无法 CancelRequest
}
req, err := http.NewRequest("GET", "https://www.google.com", nil)
if err != nil {
panic(err)
}
go func() {
time.Sleep(time.Second * time.Duration(1))
fmt.Printf("%v: abort\n", time.Now())
trans.CancelRequest(req)
}()
fmt.Printf("%v: start ...\n", time.Now())
_, err = client.Do(req)
fmt.Printf("%v: done\n", time.Now())
if err != nil {
fmt.Println(err.Error())
}
}
请问我该怎么办?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.