package common import ( "database/sql" "sync" ) var Widgets *DefaultWidgetStore type DefaultWidgetStore struct { widgets map[int]*Widget sync.RWMutex } func NewDefaultWidgetStore() *DefaultWidgetStore { return &DefaultWidgetStore{widgets: make(map[int]*Widget)} } func (s *DefaultWidgetStore) Get(id int) (*Widget, error) { s.RLock() defer s.RUnlock() w, ok := s.widgets[id] if !ok { return w, sql.ErrNoRows } return w, nil } func (s *DefaultWidgetStore) set(w *Widget) { s.Lock() defer s.Unlock() s.widgets[w.ID] = w } func (s *DefaultWidgetStore) delete(id int) { s.Lock() defer s.Unlock() delete(s.widgets, id) }