Go语言http.Get()超时设置(更新)

上次写了一遍日志分享http.Get()设置超时的方案,后来自己过了一遍代码发现逻辑上有问题。 在Dail之后设置了Deadline,之后就没再重新设置。这对于不重用连接的http请求是没有问题的,但是Go的http库是支持keep-alive的,可以重用TCP/IP连接。这意味着一个连接过了超时时间后再被使用,就会出现超时错误,因为没有再重置超时时间。 拿上次的实验代码,在发送请求时加一个keep-alive头,然后每次发送请求前加个Sleep,就可以重新以上情况。 怎样做到每次使用一个连接发...阅读全文

阅读:8467 评论:0

深入讨论channel timeout

Go 语言的 channel 本身是不支持 timeout 的,所以一般实现 channel 的读写超时都采用 select,如下: select { case <-c: case <-time.After(time.Second): } 这两天在写码的过程中突然对这样实现 channel 超时产生了怀疑,这种方式真的好吗?于是我写了这样一个测试程序: package main import ( "os" "time" ) func main() { c := make(chan int, 10...阅读全文

阅读:14496 评论:2