code: func (f *FIFO) Add(obj interface{}) error {
  	id, err := f.keyFunc(obj)
  	if err != nil {
  		return KeyError{obj, err}
  	}
  	f.lock.Lock()
  	defer f.lock.Unlock()
  	f.populated = true
  	if _, exists := f.items[id]; !exists {
  		f.queue = append(f.queue, id)
  	}
  	f.items[id] = obj
  	f.cond.Broadcast()
  	return nil
  }
docs: // Add inserts an item, and puts it in the queue. The item is only enqueued
  // if it doesn't already exist in the set.