测试一:
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)
})
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律