code: func (table *RegommendTable) Delete(key interface{}) (*RegommendItem, error) {
  	table.RLock()
  	r, ok := table.items[key]
  	if !ok {
  		table.RUnlock()
  		return nil, errors.New("Key not found in engine")
  	}
  
  	// engine value so we don't keep blocking the mutex.
  	aboutToDeleteItem := table.aboutToDeleteItem
  	table.RUnlock()
  
  	// Trigger callbacks before deleting an item from engine.
  	if aboutToDeleteItem != nil {
  		aboutToDeleteItem(r)
  	}
  
  	r.RLock()
  	defer r.RUnlock()
  
  	table.Lock()
  	defer table.Unlock()
  	delete(table.items, key)
  
  	return r, nil
  }
docs: // Delete an item from the engine.