Golang 配置文件动态更变(viper)

一.下载包

go get github.com/spf13/viper

二.源码

复制代码
 1 func LoadConf(fpname string) {
 2     ini := viper.New()
 3     ini.SetConfigFile(fpname)
 4 
 5     ini.SetDefault("database.dbname", "esaletest")
 6     ini.SetDefault("database.dbhost", "127.0.0.1")
 7     ini.SetDefault("database.dbuser", "sa")
 8     ini.SetDefault("database.dbpasswd", "Quartz!DockerP4ss")
 9     ini.SetDefault("database.dbport", "1433")
10 
11     _, err := os.Stat(fpname)
12     if err != nil {
13         if os.IsNotExist(err) {
14             absfpname, _ := filepath.Abs(fpname)
15             os.MkdirAll(filepath.Dir(absfpname), 0755)
16             err := ini.SafeWriteConfigAs(fpname)
17             if err != nil {
18                 errs := fmt.Sprintf(`"%s"生成配置文件失败。%s`, fpname, err.Error())
19                 panic(errors.New(errs))
20             }
21             errs := fmt.Sprintf(`"%s"获取配置不存在!已经重新生成配置文件。`, fpname)
22             panic(errors.New(errs))
23         }
24         panic(err)
25     }
26 
27     /**
28         // 监听到文件变化后的回调
29         ini.WatchConfig()
30         ini.OnConfigChange(func(e fsnotify.Event) {
31             fmt.Println("Config file changed:", e.Name)
32             fmt.Println(ini.Get("db.redis.passwd"))
33         })
34     **/
35 
36 }
37 
38 func TestConf() {
39     fpname := "./Conf/a/conf.yml"
40     fmt.Println(path.Ext(fpname))     // .yml
41     fmt.Println(path.Base(fpname))    // conf.yml
42     fmt.Println(path.Dir(fpname))     // Conf/a
43     fmt.Println(filepath.Abs(fpname)) // /home/chad/下载/gospace/gindir/Conf/a/conf.yml <nil>
44     aa, _ := filepath.Abs(fpname)
45     fmt.Println(path.Dir(aa)) // /home/chad/下载/gospace/gindir/Conf/a
46     LoadConf(fpname)
47 }
复制代码

 

posted @   看一百次夜空里的深蓝  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示