code: func NewClient(options ...Option) *http.Client {
  	cfg := config{
  		dialTimeout:         5 * time.Second,
  		tcpKeepAliveTimeout: 0,
  		idleConnTimeout:     90 * time.Second,
  	}
  	for _, v := range options {
  		v(&cfg)
  	}
  	return &http.Client{
  		Transport: &http.Transport{
  			DialContext: (&net.Dialer{
  				Timeout:   cfg.dialTimeout,
  				KeepAlive: cfg.tcpKeepAliveTimeout,
  			}).DialContext,
  			IdleConnTimeout:     cfg.idleConnTimeout,
  			DisableKeepAlives:   cfg.disableKeepAlives,
  			MaxIdleConnsPerHost: cfg.maxIdleConnsPerHost,
  			TLSClientConfig:     cfg.tlsConfig,
  		},
  		Timeout: cfg.requestTimeout,
  	}
  }
docs: // NewClient builds a HTTP client with suitable defaults.
  // The Options can optionally set configuration options on the
  // HTTP client, transport, or net dialer. Options are applied
  // in the order that they are passed in, so it is possible for
  // later Options previous ones.