in lru.go [187:201]
func (lru *LRU[K, V]) setHead(pos uint32) {
// Both calls to setHead() check beforehand that pos != lru.head.
// So if you run into this situation, you likely use FreeLRU in a concurrent situation
// without proper locking. It requires a write lock, even around Get().
// But better use SyncedLRU or SharedLRU in such a case.
if pos == lru.head {
panic(pos)
}
lru.elements[pos].prev = lru.head
lru.elements[pos].next = lru.elements[lru.head].next
lru.elements[lru.elements[lru.head].next].prev = pos
lru.elements[lru.head].next = pos
lru.head = pos
}