测试一:
type ServerConfig struct {
ServiceName string `mapstructure:"name"`
Age int `mapstructure:"age"`
}
func main() {
v := viper.New()
//文件路径设置
v.SetConfigFile("test.yaml")
//读取配置文件的内容到viper
if err := v.ReadInConfig(); err != nil {
panic(err)
}
//拿到配置文件的两种方式
//1.v.Get(配置名字)
fmt.Println(v.Get("name"))
//2.把配置的值封装到结构体
//需要反编码到结构体
serverConfig := ServerConfig{}
if err := v.Unmarshal(&serverConfig); err != nil {
panic(err)
}
fmt.Println(serverConfig)
//web-test
//{web-test 14}
}
测试二:
// viper读取环境变量标签:配置文件,err,fmt,serverConfig,test,viper,Println,读取 From: https://www.cnblogs.com/lunar-huazai/p/17134090.html
func GetEnvInfo(env string) bool {
viper.AutomaticEnv()
return viper.GetBool(env)
}
func main() {
debug := GetEnvInfo("VIPER_DEBUG")
fmt.Println(debug)
configFilePrefix := "config"
configFileName := fmt.Sprintf("user-web/viper-test/ch1/%s-pro.yaml", configFilePrefix)
if debug {
configFileName = fmt.Sprintf("user-web/viper-test/ch1/%s-pro.yaml", configFilePrefix)
}
v := viper.New()
v.SetConfigFile(configFileName)
if err := v.ReadInConfig(); err != nil {
panic(err)
}
serverConfig := ServerConfig{}
if err := v.Unmarshal(&serverConfig); err != nil {
panic(err)
}
fmt.Println(serverConfig.MysqlInfo.Host)
//viper的功能- 动态监控变化 就是修改yaml的时候能够被检测到然后处理
v.WatchConfig()
v.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("config file change :", e.Name)
_ = v.ReadInConfig()
_ = v.Unmarshal(&serverConfig)
fmt.Println(serverConfig)
})
}