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) } }