go httpClient

产品中一定不要使用默认的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")

}

你可能感兴趣的:(go httpClient)