产品中一定不要使用默认的http.Get
如果你觉得方便,直接使用http.Get或者类似的方法发送请求,可能会导致一些问题, 因为这默认是使用DefaultClient作为client:
多goroutine共享,这意味着在别处对DefaultClient的改动会影响你当前的使用
未设置connection timeout和 read/write timeout
默认的idle connection等设置可能不满足你的需求
一个具体的使用默认的client导致的问题可以参考 Don’t use Go’s default HTTP client (in production)。
所以Go开发过程中最好使用自己定制的Client:
vartimeout = time.Duration(2* time.Second)
funcdialTimeout(network, addrstring) (net.Conn, error) {
returnnet.DialTimeout(network, addr, timeout)
}
funcmain() {
transport := http.Transport{
Dial: dialTimeout,
Proxy: ...,
MaxIdleConns: ...,
MaxIdleConnsPerHost: ...,
IdleConnTimeout: ...,
ResponseHeaderTimeout: ...,
DisableCompression:...,
}
client := http.Client{
Transport: &transport,
}
resp, err := client.Get("http://some.url")
}