Go Web 读取配置文件
Contents
Viper 简介
viper是spf13
大神开发的开源配置解决方案,另外docker
kubernetes
等项目都在用的命令行解决方案cobra也是出自他之手。
Viper
主要的特性有:
-
setting defaults
设置默认值
-
reading from JSON, TOML, YAML, HCL, and Java properties config file
可以读取
JSON
TOML
YAML
HCL
和Java Properties
配置文件 -
live watching and re-reading of config files (optional)
监控配置文件改动,并热加载配置文件
-
reading from environment variables
从环境变量读取配置
-
reading from remote config systems (etcd or Consul), and watching changes
从远程配置中心读取配置(etcd or consul),并监控改动
-
reading from command line flags
从命令行 flag 读取配置
-
reading from buffer
从缓存中读取配置
-
setting explicit values
支持直接配置值
初始化配置
首先在主函数中增加配置初始化入口
|
|
在main
函数中主要是定义了一个flag
来作为配置文件的路径和文件名。可以使用命令行来进行传值,如./h-blog -c config.yml
也可以为空,默认是读取conf
文件夹下的config.yml
文件。
其中config.Init(*conf)
主要是用来初始化配置,并进行watch
,热加载配置文件。
|
|
其中,initConfig
是用来初始化配置的
|
|
-
首先判断是否有从命令行传进来的文件名,没有指定则使用默认的
conf/config.yml
. -
设置配置文件的格式为
yml
-
设置读取匹配的环境变量
-
设置环境变量的前缀和变量符号的替换
如果
yml
文件中为:1 2 3
addr: :8080 db: name: blog
则可以通过环境变量
1 2
export HBLOG_ADDR=:5000 export HBLOG_DB_NAME=blog
来对这个值进行设置,所有
yml
中的.
都通过_
来替代。这种方式在kubernetes
中用得比较多 -
读取配置
而watchConfig()
则主要是用来监控配置的变化,已达到热更新,也就是不用重启程序,即可读取到最新的配置,极大地便利了配置的更新和问题的调试。
|
|
读取配置
Viper
在初始化后,就可以直接使用了,用起来也是非常简单。可以直接通过viper.GetString()
viper.GetInt()
viper.GetBool()
等方法直接获取。
如:使用gin
模块时,有几种模式debug
release
test
可以选择。我们在配置文件中进行配置:
|
|
在代码中则直接使用即可:
|
|
如果是多级配置,同样可以直接使用viper.GetString("db.name")
来获取。
Viper 深度用法
读取环境变量作为配置
前面也有说到viper
初始化时两个重要的配置:
|
|
这其实主要就是通过从环境变量中读取配置,现在越来越多的应用都部署在kubernetes
这种容器集群中,这样就可以直接通过环境变量类进行配置,viper
可以直接读取配置。
小结
这篇主要是介绍了viper
开源配置解决方案的常见用法,以及如何与web
项目结合起来使用,还介绍了viper
读取环境变量的用法。