code: func (t *timedCache) getInternal(key string) (*cacheEntry, error) {
  	entry, exists, err := t.store.GetByKey(key)
  	if err != nil {
  		return nil, err
  	}
  	if exists {
  		return entry.(*cacheEntry), nil
  	}
  
  	t.lock.Lock()
  	defer t.lock.Unlock()
  	entry, exists, err = t.store.GetByKey(key)
  	if err != nil {
  		return nil, err
  	}
  	if exists {
  		return entry.(*cacheEntry), nil
  	}
  
  	// Still not found, add new entry with nil data.
  	// Note the data will be filled later by getter.
  	newEntry := &cacheEntry{
  		key:  key,
  		data: nil,
  	}
  	t.store.Add(newEntry)
  	return newEntry, nil
  }
docs: // getInternal returns cacheEntry by key. If the key is not cached yet,
  // it returns a cacheEntry with nil data.