code: func (r *Reference) Get(data ...interface{}) (interface{}, error) {
  	if r.IsClosed() {
  		return nil, errors.New("reference is already closed")
  	}
  
  	// Try outside of a lock
  	if value, ok := r.get(); ok {
  		return value, nil
  	}
  
  	r.lock.Lock()
  	defer r.lock.Unlock()
  
  	// Try again inside the lock
  	if value, ok := r.get(); ok {
  		return value, nil
  	}
  
  	// Value hasn't been set yet
  	value, err := r.initializer(first(data))
  	if err != nil {
  		return nil, err
  	}
  	r.set(value)
  
  	return value, nil
  }
docs: // Get returns the value, or an error if the initialiser returned an error.