code: func (r *RoundRobin) Select(pool HostPool) *UpstreamHost {
  	poolLen := uint32(len(pool))
  	selection := atomic.AddUint32(&r.Robin, 1) % poolLen
  	host := pool[selection]
  	// if the currently selected host is down, just ffwd to up host
  	for i := uint32(1); host.Down() && i < poolLen; i++ {
  		host = pool[(selection+i)%poolLen]
  	}
  	return host
  }
docs: // Select selects an up host from the pool using a round robin ordering scheme.