package config import ( "encoding/json" "fmt" "gopkg.in/yaml.v3" "io/ioutil" "os" "sync" ) var ( instance *config once sync.Once DevConfig Devs ) // 初始化配置,确保只初始化一次 func init() { once.Do(func() { loadConfig() // 加载配置文件 }) } // 重新加载配置文件 func ReloadConfig() { loadConfig() // 加载配置文件 } // 加载配置文件 func loadConfig() { var conf config filePath := "./config/config.yaml" if f, err := os.Open(filePath); err != nil { panic(err) } else { err := yaml.NewDecoder(f).Decode(&conf) if err != nil { panic(err) } } instance = &conf } // 获取配置文档实例 func Instance() *config { return instance } type config struct { ProjectName string `yaml:"projectName"` Logger logger `yaml:"logger"` Mqtt mqtt `yaml:"mqtt"` } type logger struct { Path string `yaml:"path"` Name string `yaml:"name"` Level string `yaml:"level"` } type mqtt struct { Server string `yaml:"server"` Id string `yaml:"id"` User string `yaml:"user"` Password string `yaml:"password"` } func LoadDevConfig() error { // 读取配置文件 data, err := ioutil.ReadFile("./dev/devs.json") if err != nil { return fmt.Errorf("读取配置文件失败: %v", err) } // 解析 JSON 数据到结构体 if err := json.Unmarshal(data, &DevConfig); err != nil { return fmt.Errorf("解析 JSON 配置失败: %v", err) } return nil } type Devs struct { Screens []*Screens `json:"ledScreens"` } type Screens struct { Sn string `json:"sn"` ScreensName string `json:"screensName"` }