80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package config
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
// SharedConfigManager 用于管理共享配置
|
|
type SharedConfigManager struct {
|
|
mu sync.RWMutex
|
|
settings map[string]interface{}
|
|
}
|
|
|
|
var shareInstance *SharedConfigManager
|
|
var shareOnce sync.Once
|
|
|
|
// NewSharedConfigManager 创建一个新的SharedConfigManager
|
|
func NewSharedConfigManager() *SharedConfigManager {
|
|
shareOnce.Do(func() {
|
|
shareInstance = &SharedConfigManager{
|
|
settings: make(map[string]interface{}),
|
|
}
|
|
})
|
|
return shareInstance
|
|
}
|
|
|
|
// Set 设置一个配置项的值
|
|
func (scm *SharedConfigManager) Set(key string, value interface{}) {
|
|
scm.mu.Lock()
|
|
defer scm.mu.Unlock()
|
|
scm.settings[key] = value
|
|
}
|
|
|
|
// SetBulk 批量设置配置项的值
|
|
func (scm *SharedConfigManager) SetBulk(configs map[string]interface{}) {
|
|
scm.mu.Lock()
|
|
defer scm.mu.Unlock()
|
|
for key, value := range configs {
|
|
scm.settings[key] = value
|
|
}
|
|
}
|
|
|
|
// Get 获取一个配置项的值
|
|
func (scm *SharedConfigManager) Get(key string) (interface{}, bool) {
|
|
scm.mu.RLock()
|
|
defer scm.mu.RUnlock()
|
|
value, exists := scm.settings[key]
|
|
return value, exists
|
|
}
|
|
|
|
// GetBulk 批量获取配置项的值
|
|
func (scm *SharedConfigManager) GetBulk(keys []string) map[string]interface{} {
|
|
scm.mu.RLock()
|
|
defer scm.mu.RUnlock()
|
|
results := make(map[string]interface{})
|
|
for _, key := range keys {
|
|
if value, exists := scm.settings[key]; exists {
|
|
results[key] = value
|
|
}
|
|
}
|
|
return results
|
|
}
|
|
|
|
// Delete 删除一个配置项
|
|
func (scm *SharedConfigManager) Delete(key string) {
|
|
scm.mu.Lock()
|
|
defer scm.mu.Unlock()
|
|
delete(scm.settings, key)
|
|
}
|
|
|
|
// GetAll 返回所有配置项的副本
|
|
func (scm *SharedConfigManager) GetAll() map[string]interface{} {
|
|
scm.mu.RLock()
|
|
defer scm.mu.RUnlock()
|
|
c := make(map[string]interface{})
|
|
for key, value := range scm.settings {
|
|
c[key] = value
|
|
}
|
|
return c
|
|
}
|