code: func NewDeferred(gen Generator) *Promise {
  	var startOnce sync.Once
  
  	p := Promise{
  		signalC: make(chan struct{}),
  	}
  	p.onGet = func(c context.Context) {
  		startOnce.Do(func() { p.runGen(c, gen) })
  	}
  	return &p
  }
docs: // NewDeferred instantiates a new, empty Promise instance. The Promise's value
  // will be the value returned by the supplied generator function.
  //
  // Unlike New, the generator function will not be immediately executed. Instead,
  // it will be run when the first call to Get is made, and will use one of the
  // Get callers' goroutines.
  // goroutine a Get caller.