package cache import ( "log" "time" ) type CacheItem struct { Expires time.Time Value interface{} } type Cache struct { items map[int]CacheItem } func New() *Cache { c := &Cache{make(map[int]CacheItem)} go c.ticker() return c } func (c *Cache) ticker() { for _ = range time.NewTicker(time.Second * 1).C { t := time.Now() for key, item := range c.items { if t.Sub(item.Expires) > 0 { log.Println("cache delete", key) delete(c.items, key) } } } } func (c *Cache) Insert(key int, item interface{}) { c.items[key] = CacheItem{time.Now().Add(time.Minute * 15), item} } func (c *Cache) Remove(key int) { delete(c.items, key) } func (c *Cache) Clear() { c.items = make(map[int]CacheItem) } func (c *Cache) Get(key int) (interface{}, bool) { if ci, ok := c.items[key]; ok { return ci.Value, true } return nil, false } func (c *Cache) Has(key int) bool { _, ok := c.items[key] return ok }