GO语言使用Viper获取系统环境变量,动态监控配置文件是否更新
package main import ( "fmt" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" "time" ) type MysqlConfig struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` } type Server struct { Name string `mapstructure:"name"` Port int `mapstructure:"port"` Mysql MysqlConfig `mapstructure:"mysql"` } //getEnv 获取系统环境变量 func getEnv(env string) bool { viper.AutomaticEnv() return viper.GetBool(env) } func main() { v := viper.New() configFileName := "stu/viper_test/config-pro.yaml" if getEnv("GO_VIPER_TEST_DEV") { configFileName = "stu/viper_test/config-dev.yaml" } v.SetConfigFile(configFileName) if err := v.ReadInConfig(); err != nil { fmt.Println(err) return } server := Server{} err := v.Unmarshal(&server) if err != nil { fmt.Println(err) return } fmt.Printf("%+v", server) //动态监控配置文件是否更新 v.WatchConfig() v.OnConfigChange(func(in fsnotify.Event) { fmt.Println("配置文件有更新", in.Name) if err := v.ReadInConfig(); err != nil { fmt.Println(err) return } err := v.Unmarshal(&server) if err != nil { fmt.Println(err) return } fmt.Printf("%+v", server) }) time.Sleep(200 * time.Second) }
发表评论