package cache import ( "errors" "time" ) func newInMemCache() Manager { return &inMemCache{make(map[string]inMemEntry)} } type inMemEntry struct { value string expiration time.Time } type inMemCache struct { entries map[string]inMemEntry } func (i *inMemCache) Set(key, value string, expiration time.Duration) error { i.entries[key] = inMemEntry{ value: value, expiration: time.Now().Add(expiration), } return nil } func (i *inMemCache) Get(key string) (string, error) { if val, exists := i.entries[key]; exists { if val.expiration.Before(time.Now()) { delete(i.entries, key) } else { return val.value, nil } } return "", errors.New("no value for given key") } func (i *inMemCache) Remove(key string) { delete(i.entries, key) }