package utils import ( "crypto/tls" "net/http" "sync" "time" ) // HTTP请求客户端管理 var timeoutClientMap = map[time.Duration]*http.Client{} // timeout => Client var timeoutClientLocker = sync.Mutex{} // NewHTTPClient 获取一个新的Client func NewHTTPClient(timeout time.Duration) *http.Client { return &http.Client{ Timeout: timeout, Transport: &http.Transport{ MaxIdleConns: 4096, MaxIdleConnsPerHost: 32, MaxConnsPerHost: 32, IdleConnTimeout: 2 * time.Minute, ExpectContinueTimeout: 1 * time.Second, TLSHandshakeTimeout: 0, TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, }, } } // SharedHttpClient 获取一个公用的Client func SharedHttpClient(timeout time.Duration) *http.Client { timeoutClientLocker.Lock() defer timeoutClientLocker.Unlock() client, ok := timeoutClientMap[timeout] if ok { return client } client = NewHTTPClient(timeout) timeoutClientMap[timeout] = client return client }