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 }
标签:
Golang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?