/ 前言 /

viper是由Steve Francia编写的开源配置解决方案, 也是cobra的作者, 我们来看下viper的功能

  • 支持JSON、TOML、YAML/YML、PROPERTIES、ENVFILE等文件的读取
  • 修改读取文件的键值数据
  • 监听配置文件的修改并自动重新加载

下载

go get github.com/spf13/viper

GitHub地址

/ 1 / 读取配置文件

在读取配置文件中我们将会演示viper的集中使用方式

我们以.yml文件为例

config.yml
user:name: "wise"age: 18
config.go
package configimport ("fmt""github.com/spf13/viper"
)// 这里的配置文件读取可以使用相对路径, 我这里因为是同级所以直接使用config.yml即可
//var filePath = "../test/config.yml"
var filePath = "config.yml"var cfg = Config{}// 这里有俩种写法, 如果你要读取的配置文件比较大而且类型较多那么建议你使用第二种
// 第一种
type Config struct {UserInfo struct{Name string `mapstructure:"name"`Age string   `mapstructure:"age"`} `mapstructure:"user"`
}// 第二种
type Config struct {User UserInfo `mapstructure:"user"`
}
UserInfo struct{Name string  `mapstructure:"name"`Age  int     `mapstructure:"age"`
}func LoadConfig() {// 设置配置文件信息viper.SetConfigType("yml")viper.SetConfigFile(filePath)// 读取配置文件err := viper.ReadInConfig()if err != nil {fmt.Println("读取配置文件失败, 异常信息 : ", err)}// 直接从viper对象中获取key的value数据,并且可以定义类型fmt.Println(viper.Get("user.name"))fmt.Println(viper.GetInt("user.age"))// 判断key是否存在, 返回true/falsefmt.Println(viper.IsSet("user.name"))// 设置key的value值, 优先级最高, 可以在读取配置文件之前设置viper.Set("user.age",19)// 将文件内容解析后封装到cfg对象中err = viper.Unmarshal(&cfg)if err != nil {fmt.Println("解析配置文件失败, 异常信息 : ", err)}
}// 使用时直接调用该方法即可
func GetInfo() Config {return cfg
}

测试代码

config_test.go
import ("fmt""testing"
)func TestGetInfo(t *testing.T) {LoadConfig()fmt.Println("name : ",GetInfo().UserInfo.Name)fmt.Println("age : ",GetInfo().UserInfo.Age)
}

输出信息

name : wise
age : 18

我们总结一下在上面我们使用到的viper的功能

  • 可以在直接从viper对象中获取数据
  • 直接从viper对象中获取数据时可以指定返回类型
  • 可以在读取配置文件之前修改value的值, 且优先级最高

/ 2 / 自动更新配置文件

我们来看一下viper是否可以自动更新配置文件

package mainimport ("fmt""github.com/spf13/viper""time"
)func main() {viper.SetConfigType("yml")viper.SetConfigFile("./test/config.yml")err := viper.ReadInConfig()if err != nil {fmt.Println("read config is failed err:", err)}viper.WatchConfig()fmt.Println("age : ", viper.GetInt("user.age"))// 我们让线程睡眠20s, 在此期间我们去修改config.yml文件中age的值time.Sleep(time.Second * 20)fmt.Println("age : ", viper.GetInt("user.age"))
}

输出信息

age : 18
age : 180

俩次打印结果一样的朋友可以将睡眠时间调整的再长一点试一下

Golang库 - viper读取配置文件相关推荐

  1. viper读取配置文件

    hello,大家好,我是聪聪. 文章目录 1. 介绍 2. 安装 3. Viper使用介绍 3.1 设置默认值 3.2 读取配置文件 3.3 写入配置文件 3.4 监控配置文件变更 3.5 环境变量读 ...

  2. python3 配置文件操作库 configparser 读取配置文件后 元组列表转字典

    配置文件 config.ini 如下: [fruit] apple=5 pear=3 banana=8 pineapple=2 peach=3 测试代码如下: import configparserc ...

  3. viper4android io错误,golang常用库之配置文件解析库-viper使用详解

    一.viper简介 viper 配置管理解析库,是由大神 Steve Francia 开发,他在google领导着 golang 的产品开发,他也是 gohugo.io 的创始人之一,命令行解析库 c ...

  4. Golang的viper库

    Golang的viper库 1.作用 viper 是一个配置解决方案,拥有丰富的特性: 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件 ...

  5. 基于Golang的监听读取配置文件的程序包开发——simpleConfig_v1

    基于Golang的监听&读取配置文件的程序包开发--simpleConfig_v1 [阅读时间:约10分钟] 一.配置文件概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 ...

  6. go 库 viper 配置解析神器

    go 库 viper 配置解析神器 文章目录 go 库 viper 配置解析神器 1. 简介 2. 安装 3. 建立默认值 4. 读取配置文件 5. 获取 key/value 方法 5.1 Get() ...

  7. c++ properties_Java怎么从这四个位置读取配置文件Properties(普通文件系统-classpath-jar-URL)

    1 简介 读取文件内容是Java常规操作,特别是读取配置文件,本文将介绍四种读取配置文件(Properties格式为例)的情况,分别是从普通文件系统.classpath.jar包内.网络资源URL. ...

  8. python 读取配置文件config_python中读取配置文件ConfigParser

    在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单的做一些介 ...

  9. python读取sqlserver数据库方法_SQLServer数据库之Python读取配置文件,并连接数据库SQL Server...

    本文主要向大家介绍了SQLServer数据库之Python读取配置文件,并连接数据库SQL Server,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 用配置文件保存固定 ...

最新文章

  1. 计算机视觉的发展现状
  2. Hibernate映射配置方法
  3. Xcode9学习笔记69 - 创建各种类型的文件(文本、数组、字典、图片)
  4. Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理
  5. bootstrap 表格不用tr td如何写_Pandas还能用来写爬虫?
  6. 【KMP】周期长度和(luogu 3435/ybtoj KMP-3)
  7. 小程序 web socket_程序员的薪水和发展方向大全
  8. Spring都用到了那些设计模式(3)
  9. Vue入门之常用指令
  10. DIALOGBOXPARAMA
  11. java如何获取全部省市_纯java获取省市区
  12. 查看电脑硬盘分区格式
  13. 如何使用视频格式转换器将flv转换成MP4
  14. 学习大数据分析要什么基础,零基础入门ok吗?
  15. APQP(advanced product quality planning先期产品质量策划)
  16. 多方合作!上海交大成立两个人工智能相关研究机构
  17. python专科生工资一般多少-专科生转行做python运维靠谱吗?
  18. MySQL-SQL语句命令
  19. 太原理工大学系统分析与设计实验报告实验室设备_皇家墨尔本理工大学电气工程师本科课程...
  20. 数学建模层次分析法一致性检验建立

热门文章

  1. 如果让你只推荐一本nbsp;Javaamp;nbs…
  2. 2023年电工杯 | 2023年电工杯数学建模竞赛思路(A题、B题)
  3. Linux操作系统应用
  4. 学习笔记:12864液晶模块的…
  5. ToggleButtonBar的使用
  6. 工具提取MP4中的音视频
  7. 你知道怎么查看 IP 地址吗?
  8. 91文件夹操作——创建和删除多级目录
  9. c语言深度剖析(12)—注释符号
  10. Jarvis OJ PORT51