code: func NewProcessCacheData() *ProcessCacheData {
  	// Once NewProcessCacheData is used (after init-time is done), we forbid
  	// registering new caches. All RegisterLRUCache/RegisterCacheSlot calls should
  	// happen during module init time.
  	finishInitTime()
  	d := &ProcessCacheData{
  		caches: make([]*lru.Cache, len(registeredCaches)),
  		slots:  make([]lazyslot.Slot, registeredSlots),
  	}
  	for i, params := range registeredCaches {
  		d.caches[i] = lru.New(params.capacity)
  	}
  	return d
  }
docs: // NewProcessCacheData allocates and initializes all registered LRU caches.
  //
  // It returns a fat stateful object that holds all the cached data. Retain it
  // and share between requests etc. to actually benefit from the cache.
  //
  // NewProcessCacheData must be called after init() time (either in main or
  // code called from main).