Go之viper配置
这个模块功能强大,读取配置,命令行,监听配置改变。
堪称多面手,在k8s,docker中,都多有应用。
这套应用,主要包括cobra,pflag,viper三件套。
了解得差不多啦。。。:)
package main
import (
"context"
"fmt"
"github.com/fsnotify/fsnotify"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
type CompanyInfomation struct {
Name string
MarketCapitalization int64
EmployeeNum int64
Department []interface{}
IsOpen bool
}
type YamlSetting struct {
TimeStamp string
Address string
Postcode int64
CompanyInfomation CompanyInfomation
}
func parseYaml(v *viper.Viper) {
var yamlObj YamlSetting
if err := v.Unmarshal(&yamlObj); err != nil {
fmt.Printf("err:%s", err)
}
fmt.Println(yamlObj)
}
func main() {
pflag.String("hostAddress", "127.0.0.1", "Server running address")
pflag.Int64("port", 8080, "Server running port")
pflag.Parse()
viper.BindPFlags(pflag.CommandLine)
fmt.Printf("hostAddress: %s, port: %s",
viper.GetString("hostAddress"),
viper.GetString("port"))
// 读取yaml文件
v := viper.New()
//设置读取的配置文件
v.SetConfigName("linux_config")
//添加读取的配置文件路径
v.AddConfigPath("./config/")
//windows环境下%GOPATH,linux环境下为$GOPATH
v.AddConfigPath("%GOPATH/src/")
//设置文件类型
v.SetConfigType("yaml")
if err := v.ReadInConfig(); err != nil {
fmt.Printf("err: %s\n", err)
}
fmt.Printf(
`
TimeStamp:%s
CompanyInfomation.Name:%s
CompanyInfomation.Department:%s
`,
v.Get("Timestamp"),
v.Get("CompanyInfomation.Name"),
v.Get("CompanyInfomation.Department"),
)
parseYaml(v)
//创建一个信道等待关闭(模拟服务器环境)
ctx, _ := context.WithCancel(context.Background())
//cancel可以关闭信道
//ctx, cancel := context.WithCancel(context.Background())
//设置监听回调函数
v.OnConfigChange(func(e fsnotify.Event) {
fmt.Printf("config is change: %s \n", e.String())
})
//开始监听
v.WatchConfig()
//信道不会主动关闭,可以主动调用cancel关闭
<-ctx.Done()
}
TimeStamp: "2019-03-10 10:09:23"
Address: "ShangHai"
Postcode: 518000
CompanyInfomation:
Name: "Sunny"
MarketCapitalization: 50000000
EmployeeNum: 200
Department:
- "Finance"
- "Design"
- "Program"
- "Sales"
IsOpen: false

Go之viper配置的更多相关文章
- Golang项目的配置管理——Viper简易入门配置
Golang项目的配置管理--Viper简易入门配置 What is Viper? From:https://github.com/spf13/viper Viper is a complete co ...
- Go 每日一库之 viper
简介 上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库. viper 是一个配置解决方案,拥有丰富的特性: 支持 JSON/TOML/YAML/HCL/envfile/ ...
- golang常用库:配置文件解析库-viper使用
一.viper简介 viper 配置解析库,是由大神 Steve Francia 开发,他在google领导着 golang 的产品开发,他也是 gohugo.io 的创始人之一,命令行解析库 cob ...
- Go语言配置管理神器——Viper中文教程
Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式. Viper Viper是适用于Go应用程序的完整配置解决方案.它被设计用于在应用 ...
- viper配置管理
安装 go get github.com/spf13/viper viper支持的功能 1.可以设置默认值 2.可以加载多种格式的配置文件,如JSON,TOML,YAML,HCL和Java属性配置文件 ...
- golang中的配置管理库viper
viper简介 Viper是适用于Go应用程序的完整配置解决方案.它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON,TOML,YAML,HCL,envfi ...
- 教你用Cobra开发类似docker的命令行
目录 前言 一.安装 二.初始化应用 gomod初始化 创建入口文件cmd/root.go 创建主程序main.go 三.生成Command 创建hello子命令 创建version子命令 四.如何设 ...
- golang常用库:cli命令行/应用程序生成工具-cobra使用
golang常用库:cli命令行/应用程序生成工具-cobra使用 一.Cobra 介绍 我前面有一篇文章介绍了配置文件解析库 Viper 的使用,这篇介绍 Cobra 的使用,你猜的没错,这 2 个 ...
- Viper解析&加载配置
Viper解析&加载配置 1 Viper是什么 Viper是一个方便Go语言应用程序处理配置信息的库.它可以处理多种格式的配置.它支持的特性: 设置默认值 从JSON.TOML.YAML ...
随机推荐
- css3实现不同进度条
进度条类型1(渐变进度条) 效果1:图片实现进度条 思路,进度条是一张图片,用定位来控制不同时间图片相对进度条box的left值来控制位置,用animate实现动画效果 html <div cl ...
- 数据库的OLE字段写入长二进制文件
//'*************************************************************************************** //'函数:将数据 ...
- 【转】Java HashMap的死循环
问题的症状 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现 ...
- 【转】Leveldb源码分析——1
先来看看Leveldb的基本框架,几大关键组件,如图1-1所示. Leveldb是一种基于operation log的文件系统,是Log-Structured-Merge Tree的典型实现.LSM源 ...
- 函数-->指定函数--->默认函数--->动态函数--> 动态参数实现字符串格式化-->lambda表达式,简单函数的表示
#一个函数何以接受多个参数#无参数#show(): ---> 执行:show() #传入一个参数 def show(arg): print(arg) #执行 show(123) #传入两个参数 ...
- gcc的使用简介与命令行参数说明
(一) gcc的基本用法(二) 警告提示功能选项(三) 库操作选项(四) 调试选项(五) 交叉编译选项 (一) gcc的基本用法使用gcc编译器时,必须给出一系列必要的调用参数和文件名称.不同参数的先 ...
- thymeleaf:日常使用总结
1.th:href 获得当前的根路径 th:href="@{/}" 2.select输出并自动选中 <select class="form-control sele ...
- Ubuntu选择软件源
1. 系统桌面右上角,系统菜单中选择Software Up to Date 2. 点击Settings-按钮 3. Ubuntu Software标签页,Download from选择中国的软件服务器 ...
- Django 2.x 常用命令
从Pycharm换成VsCode,好多命令都不会,这里记一下. 创建 Django 项目 先进入到你想要创建 project 目录下,执行命令 django-admin startproject pr ...
- Flask允许跨域
什么是跨域 在 HTML 中,<a>, <form>, <img>, <script>, <iframe>, <link> 等标 ...