一、介绍

Viper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:

  • 设置默认值
  • 从JSON、TOML、YAML、HCL和Java properties文件中读取配置数据
  • 可以监视配置文件的变动、重新读取配置文件
  • 从环境变量中读取配置数据
  • 从远端配置系统中读取数据,并监视它们(比如etcd、Consul)
  • 从命令参数中读物配置
  • 从buffer中读取
  • 调用函数设置配置信息

简单的设置默认值

viper.SetDefault("time", "2019-7-14")
viper.SetDefault("notifyList", []string{"maple","ffm"})

监视配置文件,重新读取配置数据

package main

import (
"fmt"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
)
viper:=viper.New()
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("Config file changed:", e.Name)
})

二、读取config.json

#json文件
{
"appId": "",
"secret": "maple123456",
"host": {
"address": "localhost",
"port": 5799
}
}
package main

import (
"fmt"
"github.com/spf13/viper"
) //定义config结构体
type Config struct {
AppId string
Secret string
Host Host
}
//json中的嵌套对应结构体的嵌套
type Host struct {
Address string
Port int
} func main() {
config := viper.New()
config.AddConfigPath("./kafka_demo")
config.SetConfigName("config")
config.SetConfigType("json")
if err := config.ReadInConfig(); err != nil {
panic(err)
}
fmt.Println(config.GetString("appId"))
fmt.Println(config.GetString("secret"))
fmt.Println(config.GetString("host.address"))
fmt.Println(config.GetString("host.port")) //直接反序列化为Struct
var configjson Config
if err :=config.Unmarshal(&configjson);err !=nil{
fmt.Println(err)
} fmt.Println(configjson.Host)
fmt.Println(configjson.AppId)
fmt.Println(configjson.Secret) }

最新文章

  1. 流量三角形:并非简单的"统计学"
  2. KendoUI系列:DatePicker
  3. 存在网路的情况下重命名SDE中数据图层错误(The orphan junction feature class cannot be renamed)
  4. 基于Eclipse搭建Hadoop源码环境
  5. Relative 定位与Absolute 定位实例
  6. android开发推荐书籍列表
  7. 遍历、显示ftp下的文件夹和文件信息
  8. django种表单post出现CSRF verification failed( CSRF验证失败 ) 的两种解决方式
  9. java基础学习----String
  10. Android建立模拟器进行调试
  11. android-蓝牙通信
  12. iOS音频采集过程中的音效实现
  13. webp怎么打开 webp怎么转换成jpg
  14. Centos7.2下部署Java开发环境
  15. C# Main函数中调用异步方法的2种实现
  16. Java 获取屏幕的宽、高
  17. 数据类型+内置方法 python学习第六天
  18. super 使用以及原理
  19. matlab学习(2) sort、sortrows
  20. PowerDesigner ---- 数据库设计(物理模型CDM和概念模型PDM)

热门文章

  1. 使用fastClick.js所产生的一些问题
  2. C/C++各个周期的学习
  3. Mysql 编译报错 g++: internal compiler error: Killed (program cc1plus) 解决办法
  4. PHP ftp_set_option() 函数
  5. 40 VSCode下.json文件的编写——(1) linux/g++ (2).json中参数与预定义变量的意义解释
  6. NX二次开发-UFUN替换组件UF_ASSEM_use_alternate
  7. NX二次开发-UFUN所有对象类型的宏定义
  8. vue-cli整合axios的几种方法
  9. Hadoop主要生态系统简介
  10. Python正则表达式如何进行字符串替换实例