首页 ZZ游戏攻略 正文

viper蛇类大全,你想知道的眼镜蛇都在这!

今天给大家摆一哈我最近捣鼓的这个叫 Viper 的东西,搞配置管理简直不要太方便!

最开始接触

最开始嘛我是想搞个程序,能读取各种配置文件,啥 .yaml、.json、.toml,甚至还能从环境变量里头扒拉配置。搜一圈,发现好多人都推荐 Viper,说是 Go 语言里头处理配置的扛把子。我想,这么多人说那肯定有两把刷子,就决定试试水。

上手操作

先装上再说,直接在终端里头敲行命令: go get */spf13/viper,等进度条走完,就算安装好。然后我就建个 * 文件,里头随便写点配置:


name: "我的程序"

port: 8080

在我的 Go 程序里头,我开始引入 Viper:


import (

"fmt"

"*/spf13/viper"

读取文件

然后,我开始琢磨咋个读取这个配置文件。Viper 提供几个方法,我先用最简单的 SetConfigNameAddConfigPath


func main() {

*("config") // 配置文件名,不需要带后缀

*(".") // 配置文件路径,这里我用的当前目录

//*("$HOME/.appname") // 配置文件路径,这里我用的当前目录

err := *() // 读取配置

if err != nil { // 处理错误

panic(*("Fatal error config file: %s \n", err))

运行一下,没报错,说明配置文件读进来。我再试着用 *("name") 获取配置项的值:


*(*("name"))

*(*("port"))

控制台输出 "我的程序" 和 8080,还真读出来!

多种格式支持

我寻思着,这玩意儿不会只支持 yaml ?我把配置文件名改成 *,内容也改成 JSON 格式:



"name": "我的程序",

"port": 8080

再运行,一样能读出来!看来 Viper 确实能自动识别配置文件格式。

环境变量

听说 Viper 还能从环境变量里读取配置,我设置个环境变量 APP_PORT=9090,然后在程序里头加这么一句:


*("port", "APP_PORT") // 绑定环境变量

把读取配置文件那段注释掉,再运行,发现端口变成 9090!说明环境变量的优先级比配置文件高。

监听配置变化

Viper 还有一个很厉害的功能,就是能监听配置文件的变化,实时更新配置。我加这么一段代码:



*(func(e *) {

*("Config file changed:", *)

然后在程序运行的时候,我手动修改配置文件,控制台立马输出 "Config file changed: *",说明 Viper 确实监听到变化。

总结

这一通折腾下来,我对 Viper 算是有个初步的解。这玩意儿确实挺好使,读取配置方便,支持多种格式,还能从环境变量读取,甚至能监听配置文件变化。以后再也不用为配置管理头疼!