code: func (ns *Namespace) Shuffle(seq interface{}) (interface{}, error) {
  	if seq == nil {
  		return nil, errors.New("both count and seq must be provided")
  	}
  
  	seqv := reflect.ValueOf(seq)
  	seqv, isNil := indirect(seqv)
  	if isNil {
  		return nil, errors.New("can't iterate over a nil value")
  	}
  
  	switch seqv.Kind() {
  	case reflect.Array, reflect.Slice, reflect.String:
  		// okay
  	default:
  		return nil, errors.New("can't iterate over " + reflect.ValueOf(seq).Type().String())
  	}
  
  	shuffled := reflect.MakeSlice(reflect.TypeOf(seq), seqv.Len(), seqv.Len())
  
  	randomIndices := rand.Perm(seqv.Len())
  
  	for index, value := range randomIndices {
  		shuffled.Index(value).Set(seqv.Index(index))
  	}
  
  	return shuffled.Interface(), nil
  }
docs: // Shuffle returns the given rangeable list in a randomised order.