配置文件实例化(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