code: func NewWithData(name string, initializer EntryInitializerWithData, opts ...options.Opt) *Cache {
  	useRef := useLazyRef(opts...)
  	if useRef {
  		initializer = newLazyRefInitializer(name, initializer, opts...)
  	}
  	return &Cache{
  		name:        name,
  		initializer: initializer,
  		useRef:      useRef,
  	}
  }
docs: // NewWithData creates a new lazy cache. The provided initializer accepts optional data that
  // is passed in from Get().
  // - name is the name of the cache and is only used for debugging purpose
  // - initializer is invoked the first time an entry is being cached
  // - opts are options for the cache. If any lazyref option is passed then a lazy reference
  //   is created for each of the cache entries to hold the actual value. This makes it possible
  //   to have expiring values and values that proactively refresh.