配置文件实例化(spf13/viper)的使用
"github.com/spf13/viper"这个组件使用配置文件还是蛮好用的。可以读取各种配置文件,并且能监控文件的变化
但原来的组件使用的话还是比较麻烦的,一般我们的配置文件可以配置只用一个就好,如果每次调用都进行一次实例化的话还是比较麻烦的
所有参考别人的一些开源代码自己做成了一个小组件
可以参考本博客开源的程序代码页面:config/config.go
核心的代码是:
var Configv *viper.Viper func init() { Configv = viper.New() Configv.SetConfigType("json") //设置文件格式 Configv.SetConfigFile("config/set.json") //设置地址 Configv.WatchConfig() //监控文件的变化 err := Configv.ReadInConfig() //读取配置文件 if err != nil { panic(fmt.Errorf("fatal error config file: %s", err)) } }
还有一个收藏的比较好的代码,但还没放上去
package config import ( "fmt" "github.com/spf13/viper" "sync" ) func init(){ GetConfigure() } // 单例模式 var Config *viper.Viper var once sync.Once func GetConfigure()*viper.Viper{ once.Do(func(){ Config = viper.New() Config.SetConfigFile("config.yaml") //v.AddConfigPath("./config/") fmt.Println(Config) Config.SetConfigType("yaml") if err := Config.ReadInConfig();err != nil { panic(err) }else{fmt.Println("读取配置文件")} }) return Config }
细心的朋友会发现大部分是一样的。稍等有些区别的是第二个只有多了一个sync.Once
init 函数是在文件包首次被加载的时候执行,且只执行一次
sync.Onc 是在代码运行中需要的时候执行,且只执行一次
理解一下就是俩个都只运行一次,第二段是只在需要的时候执行一次,性能上来说建议用第二种了
本文来自投稿,不代表本人立场,如若转载,请注明出处;如有问题您可以发邮件到:itlun@qq.com