code: func (l *LFUNoTS) set(key string, value interface{}) error {
  	res, err := l.cache.Get(key)
  	if err != nil && err != ErrNotFound {
  		return err
  	}
  
  	if err == ErrNotFound {
  		//create new cache item
  		ci := newCacheItem(key, value)
  
  		// if cache size si reached to max size
  		// then first remove lfu item from the list
  		if l.currentSize >= l.size {
  			// then evict some data from head of linked list.
  			l.evict(l.frequencyList.Front())
  		}
  
  		l.cache.Set(key, ci)
  		l.incr(ci)
  
  	} else {
  		//update existing one
  		val := res.(*cacheItem)
  		val.v = value
  		l.cache.Set(key, val)
  		l.incr(res.(*cacheItem))
  	}
  
  	return nil
  }
docs: // set sets a new key-value pair