func (obj *TransactTable) Items() map[int]*TableItem {
	defer obj.mu.Unlock()
	obj.mu.Lock()
	items := make(map[int]*TableItem)
	for k, v := range obj.mp {
		items[k] = v
	}
	return items
}
Items get all items of table
package objects
import (
	"sync"
)
type TableItem struct {
	transact   *Transaction
	prevoiseID int
	nextID     int
}
type TransactTable struct {
	firstID int                 
	lastID  int                 
	mp      map[int]*TableItem  
	mu      *sync.Mutex
}
func NewTransactTable() *TransactTable {
	obj := &TransactTable{
		lastID:  -1,
		firstID: -1,
		mp:      make(map[int]*TableItem),
		mu:      &sync.Mutex{},
	}
	return obj
}
func (obj *TransactTable) Remove(transact *Transaction) {
	defer obj.mu.Unlock()
	obj.mu.Lock()
	item := obj.mp[transact.GetID()]
	if item == nil {
		return
	}
	if item.prevoiseID != -1 {
		prevoiseItem := obj.mp[item.prevoiseID]
		if prevoiseItem != nil {
			prevoiseItem.nextID = item.nextID
		}
	}
	delete(obj.mp, transact.GetID())
}