code: func (s *CacheOnStorage) GetMulti(
  	keys ...interface{}) ([]interface{}, error) {
  
  	results, err := s.cache.GetMulti(keys...)
  	if err != nil {
  		return nil, err
  	}
  
  	indices := make([]int, 0, len(keys))
  	uncachedKeys := make([]interface{}, 0, len(keys))
  	for i, item := range results {
  		if item == nil {
  			indices = append(indices, i)
  			uncachedKeys = append(uncachedKeys, keys[i])
  		}
  	}
  
  	uncachedItems, err := s.storage.GetMulti(uncachedKeys...)
  	if err != nil {
  		return nil, err
  	}
  
  	foundItems := make([]interface{}, 0, len(uncachedItems))
  	for _, item := range uncachedItems {
  		if item != nil {
  			foundItems = append(foundItems, item)
  		}
  	}
  
  	if err := s.cache.SetMulti(foundItems...); err != nil {
  		// XXX: Maybe make this a non error
  		return nil, err
  	}
  
  	for i, index := range indices {
  		results[index] = uncachedItems[i]
  	}
  
  	return results, nil
  }
docs: // See Storage for documentation.