package config import ( "flag" "fmt" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" "os" "whois-go/internal/global" ) func NewConfig() *viper.Viper { envConf := os.Getenv("APP_CONF") if envConf == "" { flag.StringVar(&envConf, "conf", "config/local.yml", "config path, eg: -conf config/local.yml") flag.Parse() } if envConf == "" { envConf = "config/local.yml" } fmt.Println("load conf file:", envConf) return getConfig(envConf) } func getConfig(path string) *viper.Viper { conf := viper.New() conf.SetConfigFile(path) err := conf.ReadInConfig() if err != nil { panic(err) } conf.WatchConfig() conf.OnConfigChange(func(e fsnotify.Event) { fmt.Println("config file changed:", e.Name) if err = conf.Unmarshal(&global.G_CONFIG); err != nil { fmt.Println(err) } }) if err = conf.Unmarshal(&global.G_CONFIG); err != nil { panic(err) } return conf }