func New(maxSize int, opts *Options) Cache {
	if opts == nil {
		opts = &Options{}
	}
	return &lru{
		byAccess: list.New(),
		byKey:    make(map[string]*list.Element, opts.InitialCapacity),
		ttl:      opts.TTL,
		maxSize:  maxSize,
		rmFunc:   opts.RemovedFunc,
	}
}
New creates a new cache with the given options
package cache
import (
	"container/list"
	"sync"
	"time"
)
type lru struct {
	mut      sync.Mutex
	byAccess *list.List
	byKey    map[string]*list.Element
	maxSize  int
	ttl      time.Duration
	rmFunc   RemovedFunc
}