From 81ab7abe4e55db92930d20f683a5d9d00650657f Mon Sep 17 00:00:00 2001 From: Yun Date: Thu, 4 Apr 2024 12:02:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E8=8C=83=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- viperx.go | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/viperx.go b/viperx.go index eaf9066..0a79831 100644 --- a/viperx.go +++ b/viperx.go @@ -16,52 +16,55 @@ import ( // 使用viper初始化配置 -func InitConfig(path string, data interface{}) { +// @param configPath 配置文件路径 +// @param configData 配置数据结构体指针 +func InitConfig(configPath string, configData interface{}) { // 判断是否指针 - if reflect.ValueOf(data).Kind() != reflect.Ptr { - panic("data must be a pointer") - // return errors.New("data must be a pointer") + if reflect.ValueOf(configData).Kind() != reflect.Ptr { + panic("接收数据需要是指针类型") } - if len(path) == 0 { - flag.StringVar(&path, "c", "", "choose config file.") + // 优先级: 命令行 > 环境变量 > 默认值 + if len(configPath) == 0 { + // 从命令行读取配置文件路径 + flag.StringVar(&configPath, "c", "", "choose config file.") flag.Parse() - if path == "" { // 优先级: 命令行 > 环境变量 > 默认值 + if configPath == "" { + // 从环境变量读取配置文件路径 if configEnv := os.Getenv("config"); configEnv == "" { - path = "config.yaml" - log.Printf("您正在使用config的默认值,config的路径为%v\n", path) + configPath = "config.yaml" + log.Printf("您正在使用config的默认值,config的路径为%v\n", configPath) } else { - path = configEnv - log.Printf("您正在使用GVA_CONFIG环境变量,config的路径为%v\n", path) + configPath = configEnv + log.Printf("您正在使用GVA_CONFIG环境变量,config的路径为%v\n", configPath) } } else { - log.Printf("您正在使用命令行的-c参数传递的值,config的路径为%v\n", path) + log.Printf("您正在使用命令行的-c参数传递的值,config的路径为%v\n", configPath) } } v := viper.New() - v.SetConfigFile(path) + v.SetConfigFile(configPath) err := v.ReadInConfig() if err != nil { panic(fmt.Errorf("Fatal error config file: %s \n", err)) - // return err } + // 监控配置文件的变化 v.WatchConfig() // 监听配置的变化 v.OnConfigChange(func(e fsnotify.Event) { fmt.Println("config file changed:", e.Name) - if err := v.Unmarshal(&data); err != nil { + if err := v.Unmarshal(&configData); err != nil { log.Println(err) } }) - if err := v.Unmarshal(&data); err != nil { + // 将配置文件的内容映射到configData中 + if err := v.Unmarshal(&configData); err != nil { log.Println(err) panic(fmt.Errorf("Fatal error config file: %s \n", err)) - // return err } - // return nil }