viper-读取配置文件

测试一:
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读取环境变量
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)
})



}
posted @   lunar-华仔  阅读(174)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示