github.com/fzfile/BaiduPCS-Go@v0.0.0-20200606205115-4408961cf336/baidupcs/expires/cachemap/utils.go (about)

     1  package cachemap
     2  
     3  import (
     4  	"github.com/fzfile/BaiduPCS-Go/baidupcs/expires"
     5  )
     6  
     7  type (
     8  	OpFunc          func() expires.DataExpires
     9  	OpFuncWithError func() (expires.DataExpires, error)
    10  )
    11  
    12  func (cm *CacheOpMap) CacheOperation(op string, key interface{}, opFunc OpFunc) (data expires.DataExpires) {
    13  	var (
    14  		cache = cm.LazyInitCachePoolOp(op)
    15  		ok    bool
    16  	)
    17  
    18  	cache.LockKey(key)
    19  	defer cache.UnlockKey(key)
    20  	data, ok = cache.Load(key)
    21  	if !ok {
    22  		data = opFunc()
    23  		if data != nil {
    24  			cache.Store(key, data)
    25  		}
    26  		return
    27  	}
    28  
    29  	return
    30  }
    31  
    32  func (cm *CacheOpMap) CacheOperationWithError(op string, key interface{}, opFunc OpFuncWithError) (data expires.DataExpires, err error) {
    33  	var (
    34  		cache = cm.LazyInitCachePoolOp(op)
    35  		ok    bool
    36  	)
    37  
    38  	cache.LockKey(key)
    39  	defer cache.UnlockKey(key)
    40  	data, ok = cache.Load(key)
    41  	if !ok {
    42  		data, err = opFunc()
    43  		if err != nil {
    44  			return
    45  		}
    46  		if data == nil {
    47  			// 数据为空时也不存
    48  			return
    49  		}
    50  		cache.Store(key, data)
    51  	}
    52  
    53  	return
    54  }