code: func (c *Conn) initializeHostPool() {
  
  	// If no hosts are set, fallback to defaults
  	if len(c.Hosts) == 0 {
  		c.Hosts = append(c.Hosts, fmt.Sprintf("%s:%s", c.Domain, c.Port))
  	}
  
  	// Epsilon Greedy is an algorithm that allows HostPool not only to
  	// track failure state, but also to learn about "better" options in
  	// terms of speed, and to pick from available hosts based on how well
  	// they perform. This gives a weighted request rate to better
  	// performing hosts, while still distributing requests to all hosts
  	// (proportionate to their performance).  The interface is the same as
  	// the standard HostPool, but be sure to mark the HostResponse
  	// immediately after executing the request to the host, as that will
  	// stop the implicitly running request timer.
  	//
  	// A good overview of Epsilon Greedy is here http://stevehanov.ca/blog/index.php?id=132
  	if c.hp != nil {
  		c.hp.Close()
  	}
  	c.hp = hostpool.NewEpsilonGreedy(
  		c.Hosts, c.DecayDuration, &hostpool.LinearEpsilonValueCalculator{})
  }
docs: // Set up the host pool to be used