code: func (w *KeyedValue) valueWaiter(k string) (interface{}, *Value) {
  	w.once.Do(w.init)
  
  	// If we have this value already, return it
  	if v, ok := w.values[k]; ok {
  		return v, nil
  	}
  
  	// If we're closed, return that
  	if w.closed {
  		return ErrClosed, nil
  	}
  
  	// No pending value, check for a waiter
  	val := w.waiters[k]
  	if val == nil {
  		val = new(Value)
  		w.waiters[k] = val
  	}
  
  	// Return the waiter
  	return nil, val
  }
docs: // valueWaiter gets the value or the Value waiter for a given key.
  //
  // This must be called with lock held.