75 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|