code: func (cache *Cache) Get(c context.Context, key []byte) (Value, error) {
  	// Leave any current transaction.
  	c = datastore.WithoutTransaction(c)
  
  	var h Handler
  	if hf := cache.HandlerFunc; hf != nil {
  		h = hf(c)
  	}
  	if h == nil {
  		return Value{}, errors.New("unable to generate Handler")
  	}
  
  	// Determine which Locker to use.
  	locker := h.Locker(c)
  	if locker == nil {
  		locker = nopLocker{}
  	}
  
  	bci := boundCacheInst{
  		Cache:  cache,
  		h:      h,
  		locker: locker,
  	}
  	return bci.get(c, key)
  }
docs: // Get retrieves a cached Value from the cache.
  //
  // If the value is not defined, the Handler's Refresh function will be used to
  // obtain the value and, upon success, the Value will be added to the cache
  // and returned.
  //
  // If the Refresh function returns an error, that error will be propagated
  // as-is and returned.