code: func (r *Cache) CloseWeak() error {
  	r.mu.Lock()
  	if !r.closed {
  		r.closed = true
  	}
  	r.mu.Unlock()
  
  	// Avoid deadlock.
  	if r.cacher != nil {
  		r.cacher.EvictAll()
  		if err := r.cacher.Close(); err != nil {
  			return err
  		}
  	}
  	return nil
  }
docs: // CloseWeak closes the 'cache map' and evict all 'cache node' from cacher, but
  // unlike Close it doesn't forcefully releases 'cache node'.