package app import "sync" var periodCache = periodCacheType{ obj: map[string]map[string]*CalendarPeriod{}, } // periodCacheType maps [accountID][dateString] type periodCacheType struct { sync.RWMutex obj map[string]map[string]*CalendarPeriod } func (m *periodCacheType) get(accountID, dateStr string) (*CalendarPeriod, bool) { m.RLock() defer m.RUnlock() r, ok := m.obj[accountID][dateStr] return r, ok } func (m *periodCacheType) put(accountID, dateStr string, period *CalendarPeriod) { m.init(accountID) m.Lock() defer m.Unlock() m.obj[accountID][dateStr] = period } func (m *periodCacheType) init(accountID string) { m.RLock() defer m.RUnlock() _, ok := m.obj[accountID] if !ok { m.obj[accountID] = map[string]*CalendarPeriod{} } }