Viper的使用方法
Viper的使用方法
一、背景
Viper是适用于Go应用程序(包括Twelve-Factor App)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:
(1)设置默认值
(2)从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
(3)实时监控和重新读取配置文件(可选)
(4)从环境变量中读取
(5)从远程配置系统(etcd或Consul)读取并监控配置变化
(6)从命令行参数读取配置
(7)从buffer读取配置
(8)显式配置值
包的引用
github.com/spf13/viper
二、读取配置文件
1、yaml文件的书写
port: 8080
cas: "this is my cas"mysql:host: "127.0.0.1"port: "3306"dbname: "cas"
注:一定要在键值对的:后面加上空格符号
2、配置Viper最少知道在那个路径下寻找需要的配置文件(可以不知道全部路径和其他)
func InitConfig(){viper.SetConfigName("Conf") //找寻文件的名字viper.SetConfigType("yaml") // 找寻文件的类型viper.AddConfigPath("conf") //从当前目录下的哪个文件夹找寻,viper.AddConfigPath(".") //.代表当前文件夹找寻,可以多个目录找寻,生成数组err:=viper.ReadInConfig() //读取配置文件if err!=nil{if v,ok:=err.(viper.ConfigFileNotFoundError);ok{fmt.Println(v)}else{panic(fmt.Errorf("read config err=%s",err))}}
}func main(){InitConfig()cas:=viper.GetString("cas") //Get cas Confighost:=viper.GetString("mysql.host") //Get mysql.host Configfmt.Println("Get Config")fmt.Println(cas,host)
}
三、写入配置文件
从配置文件中读取配置文件是有用的,但是有时你想要存储在运行时所做的所有修改。为此,可以使用下面一组命令,每个命令都有自己的用途:
1、WriteConfig - 将当前的viper配置写入预定义的路径并覆盖(如果存在的话)。如果没有预定义的路径,则报错。
2、SafeWriteConfig - 将当前的viper配置写入预定义的路径。如果没有预定义的路径,则报错。如果存在,将不会覆盖当前的配置文件。
3、WriteConfigAs - 将当前的viper配置写入给定的文件路径。将覆盖给定的文件(如果它存在的话)。
4、SafeWriteConfigAs - 将当前的viper配置写入给定的文件路径。不会覆盖给定的文件(如果它存在的话)。
四、监控并重新读取配置文件
viper.WatchConfig()viper.OnConfigChange(func(in fsnotify.Event) {//Can Add Some Logicsfmt.Println("Config Was Changed",in.Name)})
五、从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
AllSettings() : map[string]interface{}
//判断配置中是否存在这个值
IsSet(key string) : bool
Viper可以通过传入.
分隔的路径来访问嵌套字段
特殊情况:
{"datastore.metric.host": "0.0.0.0","host": {"address": "localhost","port": 5799},"datastore": {"metric": {"host": "127.0.0.1","port": 3099},"warehouse": {"host": "198.0.0.1","port": 2112}}
}GetString("datastore.metric.host") // 返回 "0.0.0.0"
六、提取子树
app:cache1:max-items: 100item-size: 64cache2:max-items: 200item-size: 80
让subv赋值给app.cache1
subv := viper.Sub("app.cache1")
subv现在就代表:
max-items: 100item-size: 64
七、反序列化与序列化
1、根据yaml定制结构体
port: 8080
cas: "this is my cas hhh"mysql:host: "127.0.0.1"port: "3306"dbname: "cas"
定制的结构体
package modelstype Config struct{Port int `mapstructure:"port"`Cas string `mapstructure:"cas"`MySqlConfig `mapstructure:"mysql"`
}type MySqlConfig struct{Host string `mapstructure:"host"`Port int `mapstructure:"port"`Dbname string `mapstructure:"dbname"`
}
反序列化
err=viper.Unmarshal(&c)if err!=nil{panic("Umarshal ERR")}
也可将Config文件序列化成字符串
import (yaml "gopkg.in/yaml.v2"// ...
)
func yamlStringSettings() string {c := viper.AllSettings()bs, err := yaml.Marshal(c)if err != nil {log.Fatalf("unable to marshal config to YAML: %v", err)}return string(bs)
如果看完对自己有所帮助,请点赞支持
Viper的使用方法相关推荐
- 配置管理神器 Viper
文章目录 配置管理神器 Viper Viper介绍 为什么选择Viper 把值存入Viper 设置默认值 读取配置文件 写入配置文件(了解) 监控并重新读取配置文件 从io.Reader读取配置(了解 ...
- viper4android io错误,Go之Viper
简介 Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式; Viper是适用于Go应用程序(包括Twelve-Factor App)的 ...
- spf13/viper
参考资料 仓库地址 https://github.com/spf13/viper Viper(毒蛇,蝰蛇)是Golang应用程序开源配置解决方案,包括12-Factor应用程序.旨在应用程序中处理各种 ...
- github.com/spf13/viper go viper包介绍
什么是Viper? Viper是一个Go应用程序完整的配置文件解决方案,包括12-Factor应用程序.它被设计为:在应用程序中工作,可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON ...
- viper4android io错误,viper操作文档
# viper操作文档 # 1 Viper简单介绍 # 1.1 什么是Viper Viper介绍 Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序.它旨在在应用程序中工作,并 ...
- 各类配置文件格式简介(ini,yaml,conf,xml...)和nb的Viper
目录 配置文件 ini 介绍 语法 demo 库 json 语法 demo 库 xml 介绍 语法&demo yaml demo toml properties HOCON plist(pli ...
- go_viper解析
什么是Viper? Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序.它旨在在应用程序中工作,并可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON,TOML, ...
- G0第25章:Gin框架进阶项目实战
1 Gin框架源码解析 通过阅读gin框架的源码来探究gin框架路由与中间件的秘密. 1.1 Gin框架路由详解 gin框架使用的是定制版本的httprouter,其路由的原理是大量使用公共前缀的树结 ...
- 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群
作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...
最新文章
- 宏基因组合种树第290期—油松
- Python实现链表
- Matlab读取txt文件中的数据(使用textread函数)
- python中高阶函数和装饰器_三.Python高阶函数和装饰器
- 计算机应用基础模块4客观题,国开河北[课程号]00815《计算机应用基础》模块4PowerPoint2010电子演示文稿系统——客观题辅导答案...
- Scrapy定向爬虫教程(二)——提取网页内容
- 鸿蒙os什么时候用到手机,鸿蒙OS何时用在手机上?余承东称明年会有
- java实验的总结_java实验总结
- “李刚畅谈Java编程人生”讲座
- 持续交付——不仅仅是技术
- 算法:逆序局部链表 Reverse Linked List II
- 电容电感频率测量表 电路原理
- 生意参谋指数转化api
- java集合框架之集合工具类Arrays类
- 远程登陆Win10自带子系统Ubuntu-22.04
- 数据可视化(一):matplotlib
- ulipad 无法安装使用、无法调试、64位版本问题 ImportError: No module named comtypes 整体解决方案!
- antd select 等组件可搜索问题
- php 邮币卡源码,如何使用CSS的Grid布局实现小松鼠邮票的效果(附源码)
- 外贸行业网站的seo优化推广怎么做?优化技巧详解