go 配置文件解析viper包

github地址:github.com/spf13/viper

Viper 是一个完整的 Go 应用程序配置解决方案,优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下:

  • 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件;

  • 可以设置监听配置文件的修改,修改时自动加载新的配置;

  • 从环境变量、命令行选项和io.Reader中读取配置;

  • 从远程配置系统中读取和监听修改,如 etcd/Consul;

  • 代码逻辑中显示设置键值

注:Viper让需要重启服务器才能使配置生效的日子一去不复返!!!这才是VIper最大的魅力

//global

var (  GVA_DB     *gorm.DB  GVA_DBList map[string]*gorm.DB  GVA_REDIS  *redis.Client  GVA_CONFIG config.Server  GVA_VP     *viper.Viper  // GVA_LOG    *oplogging.Logger  GVA_LOG                 *zap.Logger  GVA_Concurrency_Control = &singleflight.Group{}
  BlackCache local_cache.Cache  lock       sync.RWMutex)

// config.Server

type Server struct {  JWT     JWT     `mapstructure:"jwt" json:"jwt" yaml:"jwt"`  Zap     Zap     `mapstructure:"zap" json:"zap" yaml:"zap"`  Redis   Redis   `mapstructure:"redis" json:"redis" yaml:"redis"`  Email   Email   `mapstructure:"email" json:"email" yaml:"email"`  Casbin  Casbin  `mapstructure:"casbin" json:"casbin" yaml:"casbin"`  System  System  `mapstructure:"system" json:"system" yaml:"system"`  Captcha Captcha `mapstructure:"captcha" json:"captcha" yaml:"captcha"`  // auto  AutoCode Autocode `mapstructure:"autocode" json:"autocode" yaml:"autocode"`  // gorm  Mysql  Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"`  Pgsql  Pgsql `mapstructure:"pgsql" json:"pgsql" yaml:"pgsql"`  DBList []DB  `mapstructure:"db-list" json:"db-list" yaml:"db-list"`  // oss  Local      Local      `mapstructure:"local" json:"local" yaml:"local"`  Qiniu      Qiniu      `mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"`  AliyunOSS  AliyunOSS  `mapstructure:"aliyun-oss" json:"aliyun-oss" yaml:"aliyun-oss"`  HuaWeiObs  HuaWeiObs  `mapstructure:"hua-wei-obs" json:"hua-wei-obs" yaml:"hua-wei-obs"`  TencentCOS TencentCOS `mapstructure:"tencent-cos" json:"tencent-cos" yaml:"tencent-cos"`  AwsS3      AwsS3      `mapstructure:"aws-s3" json:"aws-s3" yaml:"aws-s3"`
  Excel Excel `mapstructure:"excel" json:"excel" yaml:"excel"`  Timer Timer `mapstructure:"timer" json:"timer" yaml:"timer"`
  // 跨域配置  Cors CORS `mapstructure:"cors" json:"cors" yaml:"cors"`}

下方是使用方法

func Viper(path ...string) {//一般放在初始化 init中执行  v := viper.New()//创建新的  if len(path) <= 0 {//判断是否传入配置文件地址    v.AddConfigPath("./")//没有地址就用默认的地址  } else {    v.AddConfigPath(path[0])//使用第一个参数作为配置文件地址  }  //路径  v.SetConfigType("yml")//设置配置文件的类型  v.SetConfigName("config")//设置配置文件的名称  err := v.ReadInConfig() //读取配置文件  if err != nil {    panic(err)  }  if err := v.Unmarshal(&global.GVA_CONFIG); err != nil {//将读取的配置文件信息赋值给全局配置文件    panic(err)  }  v.WatchConfig()//监听配置文件是否有变动  v.OnConfigChange(func(e fsnotify.Event) { //fsnotify.Event 文件变更事件    fmt.Println("config file changed:", e.Name)//事件名称    if err := v.Unmarshal(&global.GVA_CONFIG); err != nil {      fmt.Println(err)    }  })  global.GVA_VP = v}

在Viper中有多个获取配置文件内容的方法,可根据值的类型进行选择:

  • Get(key string) : interface{}

  • GetBool(key string) : bool

  • GetFloat64(key string) : float64

  • GetInt(key string) : int

  • GetIntSlice(key string) : []int

  • GetString(key string) : string

  • GetStringMap(key string) : map[string]interface{}

  • GetStringMapString(key string) : map[string]string

  • GetStringSlice(key string) : []string

  • GetTime(key string) : time.Time

  • GetDuration(key string) : time.Duration

  • IsSet(key string) : bool

  • AllSettings() : map[string]interface{}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值