code: func NewHeap(keyFn KeyFunc, lessFn LessFunc) *Heap {
  	h := &Heap{
  		data: &heapData{
  			items:    map[string]*heapItem{},
  			queue:    []string{},
  			keyFunc:  keyFn,
  			lessFunc: lessFn,
  		},
  	}
  	h.cond.L = &h.lock
  	return h
  }
docs: // NewHeap returns a Heap which can be used to queue up items to process.