Files
cmii-uav-watchdog-project/cmii-uav-watchdog-center/config/config_loader.go
2025-12-06 11:26:05 +08:00

75 lines
1.4 KiB
Go

package config
import (
"cmii-uav-watchdog-common/wdd_log"
"encoding/json"
"os"
"sync"
)
var (
config *Config
configOnce sync.Once
)
// LoadConfig 加载配置
func LoadConfig(configPath string) (*Config, error) {
configOnce.Do(func() {
// 读取配置文件
data, err := os.ReadFile(configPath)
if err != nil {
// 如果配置文件不存在,则创建默认配置
if os.IsNotExist(err) {
config = createDefaultConfig()
// 保存默认配置
saveConfig(configPath, config)
return
}
wdd_log.Error("读取配置文件失败: %v", err)
return
}
// 解析配置
var cfg Config
if err := json.Unmarshal(data, &cfg); err != nil {
wdd_log.Error("解析配置文件失败: %v", err)
return
}
config = &cfg
})
return config, nil
}
// GetConfig 获取配置
func GetConfig() *Config {
if config == nil {
// 如果配置未初始化,则加载默认配置
config = createDefaultConfig()
}
return config
}
// 创建默认配置
func createDefaultConfig() *Config {
return &Config{
Server: ServerConfig{
Port: 8080,
},
}
}
// 保存配置
func saveConfig(configPath string, cfg *Config) {
data, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
wdd_log.Error("序列化配置失败: %v", err)
return
}
if err := os.WriteFile(configPath, data, 0644); err != nil {
wdd_log.Error("保存配置文件失败: %v", err)
}
}