code: func NewRoundRobinResourcePool(
  	options Options,
  	createPool func(Options) ResourcePool,
  	pools ...*ResourceLocationPool) (ResourcePool, error) {
  
  	locations := make(map[string]bool)
  
  	for _, pool := range pools {
  		if pool.ResourceLocation == "" {
  			return nil, errors.New("Invalid resource location")
  		}
  
  		if locations[pool.ResourceLocation] {
  			return nil, errors.Newf(
  				"Duplication resource location %s",
  				pool.ResourceLocation)
  		}
  		locations[pool.ResourceLocation] = true
  
  		if pool.Pool == nil {
  			return nil, errors.New("Invalid pool")
  		}
  	}
  
  	if createPool == nil {
  		createPool = NewSimpleResourcePool
  	}
  
  	counter := new(int64)
  	atomic.StoreInt64(counter, 0)
  
  	shuffle(pools)
  
  	return &roundRobinResourcePool{
  		options:    options,
  		createPool: createPool,
  		rwMutex:    sync.RWMutex{},
  		isLameDuck: false,
  		pools:      pools,
  		counter:    counter,
  	}, nil
  }
docs: // This returns a RoundRobinResourcePool.