code: func (m *BaseShardManager) GetShardsForSentinelsFromItems(
  	items []*Item) map[int]*ShardMapping {
  
  	keys := make([]string, len(items))
  	for i, item := range items {
  		keys[i] = item.Key
  	}
  
  	m.rwMutex.RLock()
  	defer m.rwMutex.RUnlock()
  
  	numShards := len(m.shardStates)
  	results := m.getShardsForSentinelsLocked(keys)
  
  	// Now fill in all entries with items.
  	for _, item := range items {
  		shardId := m.getShardId(item.Key, numShards)
  
  		entry := results[shardId]
  		if len(entry.Items) == 0 {
  			entry.Items = make([]*Item, 0, len(entry.Keys))
  		}
  		entry.Items = append(entry.Items, item)
  	}
  
  	return results
  }
docs: // See ShardManager interface for documentation.