package instance import ( "sync" ) var Mgr *insManager type insManager struct { sync.RWMutex insMap map[string]*Instance // [uniqueNo] } func init() { Mgr = &insManager{ insMap: make(map[string]*Instance), } } func (m *insManager) Add(uniqueNo string, ins *Instance) { m.Lock() defer m.Unlock() m.insMap[uniqueNo] = ins } func (m *insManager) Delete(uniqueNo string) { m.Lock() defer m.Unlock() delete(m.insMap, uniqueNo) } func (m *insManager) GetAll() map[string]*Instance { m.RLock() defer m.RUnlock() return m.insMap } func (m *insManager) GetByUniqueNo(uniqueNo string) *Instance { m.RLock() defer m.RUnlock() return m.insMap[uniqueNo] } func (m *insManager) LoadOrStoreByInstanceID(instanceID int32, ins *Instance) (*Instance, bool) { m.Lock() defer m.Unlock() for _, instance := range m.insMap { if instance.InstanceID == instanceID { return instance, true } } m.insMap[ins.UniqueNo] = ins return ins, false }