「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战」。
简介
继续介绍一个spf13大佬的项目viper
用于读取配置文件的库
viper
官网: github.com/spf13/viper
官网声称可以读取所有类型的配置和格式,还具有热加载配置功能,非常强大
特点
支持的配置类型和格式:
- 支持读取JSON,TOML,YAML,HCL,envfile以及java properties配置文件
- 支持读取环境变量
- 支持读取远程组件的配置(etcd或者consul)
- 支持Go命令行参数(flags)
- 支持设置默认值和确定值
- 不区分配置大小写
配置格式优先顺序:
- explicit call to
Set
- flag
- env
- config
- key/value store
- default
使用
本文不会将所有配置类型和所有功能做演示,只演示自已常用的部分
安装
基于go model的方式安装
1 | js复制代码go get -u github.com/spf13/viper |
在代码中引入
1 | js复制代码import "github.com/spf13/viper" |
例子1(简单读取配置然后输出)
先写一份yaml的配置文件,取名为dev.yaml
1 | yaml复制代码serverPort: 8808 |
编写demo,读取配置文件,然后打印出来
viper默认没有配置路径,类型和名称,需要自行定义
1 | go复制代码package main |
效果如下
例子2(热加载和默认值)
配置文件还是以例子1为例
设置默认值调用SetDefault,填入k/v既可,不过默认值是优先级最低的。如果配置文件或环境变量有 相同key,默认值就会失效
这里的热加载需要注意点是,,在修改了配置后,一定要Ctrl+c保存,否则配置不会变化
1 | js复制代码package main |
运行效果如下
远程配置
根据官网编写了读取远程etcd的demo,一直报错: panic: Remote Configurations Error: No Files Found,一直没有弄好
不过有位小哥的博客弄了另一套解决方案,传送门: blog.huoding.com/2020/08/10/…
nacos支持
另外还有大佬写了关于viper支持以nacos配置的库,非常不错哦
github.com/yoyofxteam/…
参考
本文转载自: 掘金