code: func loadLibInitializer() lazycache.EntryInitializer {
  	return func(key lazycache.Key) (interface{}, error) {
  
  		ctxKey := key.(*pkcs11CtxCacheKey)
  		var slot uint
  		logger.Debugf("Loading pkcs11 library [%s]\n", ctxKey.lib)
  		if ctxKey.lib == "" {
  			return &ContextHandle{}, errors.New("No PKCS11 library default")
  		}
  
  		ctx := mPkcs11.New(ctxKey.lib)
  		if ctx == nil {
  			return &ContextHandle{}, errors.Errorf("Instantiate failed [%s]", ctxKey.lib)
  		}
  
  		err := ctx.Initialize()
  		if err != nil && err != mPkcs11.Error(mPkcs11.CKR_CRYPTOKI_ALREADY_INITIALIZED) {
  			logger.Warn("Failed to initialize context:", err)
  			return &ContextHandle{}, errors.WithMessage(err, "Failed to initialize pkcs11 ctx")
  		}
  
  		slots, err := ctx.GetSlotList(true)
  		if err != nil {
  			return &ContextHandle{}, errors.WithMessage(err, "Could not get Slot List")
  		}
  		found := false
  		for _, s := range slots {
  			info, errToken := ctx.GetTokenInfo(s)
  			if errToken != nil {
  				continue
  			}
  			logger.Debugf("Looking for %s, found label %s\n", ctxKey.label, info.Label)
  			if ctxKey.label == info.Label {
  				found = true
  				slot = s
  				break
  			}
  		}
  		if !found {
  			return &ContextHandle{}, errors.Errorf("Could not find token with label %s", ctxKey.label)
  		}
  		sessions := make(chan mPkcs11.SessionHandle, ctxKey.opts.sessionCacheSize)
  		return &ContextHandle{ctx: ctx, slot: slot, pin: ctxKey.pin, lib: ctxKey.lib, label: ctxKey.label, sessions: sessions, opts: ctxKey.opts}, nil
  	}
  }
docs: //loadLibInitializer initializer for context handler cache