package utils import ( "api/config" "flag" "github.com/spf13/viper" "log" "strings" ) // InitViper 优先级: 方法传参 > 命令行 > 默认值 func InitViper() { // 根据命令行读取配置文件路径 var configPath string flag.StringVar(&configPath, "c", "", "chosse config file.") flag.Parse() if configPath != "" { // 命令行读取到参数 log.Printf("您正在使用命令行的-c参数传递的值,config的路径为 %s\n", configPath) } else { // 命令行未读取到参数 log.Println("命令行参数为空, 默认加载: config/config.yaml") configPath = "config/config.yaml" } // 目前读取固定固定路径的配置文件 v := viper.New() v.SetConfigFile(configPath) v.AutomaticEnv() // 允许使用环境变量 v.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) // SERVER_APPMODE => SERVER.APPMODE // 读取配置文件 if err := v.ReadInConfig(); err != nil { log.Panic("配置文件读取失败: ", err) } // 加载配置文件内容到结构体对象 if err := v.Unmarshal(&config.Cfg); err != nil { log.Panic("配置文件内容加载失败: ", err) } log.Println("配置文件内容加载成功") }