1. 首页

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