package boots import ( "fmt" "go-nc/configs/global" "go-nc/internal/utils" "os" "path/filepath" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" ) // 初始化配置 func InitConfig() *viper.Viper { configYamlPath := filepath.Join(utils.GetProjectRoot(), "configs", "config.yaml") // 判断配置文件是否存在 if _, err := os.Stat(configYamlPath); err != nil { configYamlPath = utils.GetExePath() + "/configs/config.yaml" } // 初始化viper v := viper.New() v.SetConfigFile(configYamlPath) v.SetConfigType("yaml") if err := v.ReadInConfig(); err != nil { panic(fmt.Errorf("配置文件读取失败: %s", err)) } // 监听配置文件 v.WatchConfig() v.OnConfigChange(func(in fsnotify.Event) { fmt.Println("配置文件已更改:", in.Name) // 重载配置 if err := v.Unmarshal(&global.App.Config); err != nil { fmt.Println(err) } }) // 将配置赋值给全局变量 if err := v.Unmarshal(&global.App.Config); err != nil { fmt.Println(err) } return v }