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")

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容