code: func (pm *Map) Get(c context.Context, key interface{}, gen Generator) *Promise {
  	pm.mu.RLock()
  	p := pm.m[key]
  	pm.mu.RUnlock()
  
  	if p != nil {
  		return p
  	}
  
  	pm.mu.Lock()
  	defer pm.mu.Unlock()
  
  	if p = pm.m[key]; p == nil {
  		p = New(c, gen)
  		if pm.m == nil {
  			pm.m = make(map[interface{}]*Promise, 1)
  		}
  		pm.m[key] = p
  	}
  	return p
  }
docs: // Get either returns an existing promise for the given key or creates and
  // immediately launches a new promise.