code: func (ch *CRLChecker) shard(c context.Context, idx int) (shards.Shard, error) {
  	val, err := ch.shards[idx].Get(c, func(prev interface{}) (interface{}, time.Duration, error) {
  		prevState, _ := prev.(shardCache)
  		newState, err := ch.refetchShard(c, idx, prevState)
  		return newState, ch.cacheDuration, err
  	})
  	if err != nil {
  		return nil, err
  	}
  	// lazyslot.Get always returns non-nil val on success. It is safe to cast it
  	// to whatever we returned in the callback (which is always shardCache, see
  	// refetchShard).
  	return val.(shardCache).shard, nil
  }
docs: // shard returns a shard given its index.