package config import ( "sync" ) // ServiceDictionary 服务字典管理器 type ServiceDictionary struct { mu sync.RWMutex userDict map[string][]string passwords []string initialized bool } // NewServiceDictionary 创建服务字典管理器 func NewServiceDictionary() *ServiceDictionary { return &ServiceDictionary{ userDict: getDefaultUserDict(), passwords: getDefaultPasswords(), initialized: true, } } // getDefaultUserDict 获取默认用户字典 func getDefaultUserDict() map[string][]string { // 返回常量的深拷贝 result := make(map[string][]string) for service, users := range DefaultUserDict { usersCopy := make([]string, len(users)) copy(usersCopy, users) result[service] = usersCopy } return result } // getDefaultPasswords 获取默认密码字典 func getDefaultPasswords() []string { // 返回常量的副本 result := make([]string, len(DefaultPasswords)) copy(result, DefaultPasswords) return result } // GetAllUserDicts 获取所有服务的用户字典 func (sd *ServiceDictionary) GetAllUserDicts() map[string][]string { sd.mu.RLock() defer sd.mu.RUnlock() result := make(map[string][]string) for service, users := range sd.userDict { usersCopy := make([]string, len(users)) copy(usersCopy, users) result[service] = usersCopy } return result } // GetPasswords 获取默认密码字典 func (sd *ServiceDictionary) GetPasswords() []string { sd.mu.RLock() defer sd.mu.RUnlock() // 返回副本,避免外部修改 result := make([]string, len(sd.passwords)) copy(result, sd.passwords) return result } // 全局服务字典实例 var ( globalServiceDict *ServiceDictionary serviceDictOnce sync.Once ) // GetGlobalServiceDict 获取全局服务字典实例 func GetGlobalServiceDict() *ServiceDictionary { serviceDictOnce.Do(func() { globalServiceDict = NewServiceDictionary() }) return globalServiceDict }