博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go配置文件读取
阅读量:5977 次
发布时间:2019-06-20

本文共 1770 字,大约阅读时间需要 5 分钟。

一个强大简单好用的配置解决方案,

Viper具有以下特性:

  • 设置默认值
  • 可以读取如下格式的配置文件:JSON、TOML、YAML、HCL
  • 监控配置文件改动,并热加载配置文件
  • 从环境变量读取配置
  • 从远程配置中心读取配置(etcd/consul),并监控变动
  • 从命令行 flag 读取配置
  • 从缓存中读取配置
  • 支持直接设置配置项的值

Viper的读取顺序:

  • viper.Set() 所设置的值
  • 命令行 flag
  • 环境变量
  • 配置文件
  • 配置中心:etcd/consul
  • 默认值

Viper在初始化之后,只需要调用viper.GetString()viper.GetInt()viper.GetBool() 等函数即可得到配置文件中对应的参数。

Viper 也可以非常方便地读取多个层级的配置,比如这样一个 YAML 格式的配置:

common:    db:        name: db        addr: 127.0.0.1:3306        username: root        password: root复制代码

如果要读取name,只需要执行viper.GetString("common.db.name")就可以

下面来一个简单的例子介绍Viper: config/config.go

package configimport (	"strings"	"github.com/fsnotify/fsnotify"	"github.com/spf13/viper")type Config struct {	Name string}func Init(cfg string) error {	c := Config{		Name: cfg,	}    // 初始化配置文件	if err := c.initConfig(); err != nil {		return err	}		c.watchConfig()	return nil}func (c *Config) initConfig() error {	if c.Name != "" {	   // 如果指定了配置文件,则解析指定的配置文件		viper.SetConfigFile(c.Name)	} else {	   // 如果没有指定配置文件,则解析默认的配置文件		viper.AddConfigPath("conf")		viper.SetConfigName("config")	}   // 设置配置文件格式为YAML	viper.SetConfigType("yaml")	// viper解析配置文件	if err := viper.ReadInConfig(); err != nil {		return err	}	return nil}// 监听配置文件是否改变,用于热更新func (c *Config) watchConfig() {	viper.WatchConfig()	viper.OnConfigChange(func(e fsnotify.Event) {		fmt.Printf("Config file changed: %s\n", e.Name)	})}复制代码

conf/config.yaml

name: democommon:    db:        name: db        addr: 127.0.0.1:3306        username: root        password: root复制代码

main.go

package mainimport (	"test/config"  "fmt"	"github.com/spf13/viper")func main() {	if err := config.Init(""); err != nil {		panic(err)	}	name := viper.GetString("name")	fmt.Println("Viper get name:",name)}复制代码

执行go run main.go

输出Viper get name: demo

微信搜索「goentry-xyz」,关注公众号「灯下独码」

转载地址:http://grsox.baihongyu.com/

你可能感兴趣的文章
fail2ban 保护linux安全(转载)已用于生产环境
查看>>
表格元素的添加和删除,计算器,全选全不反选
查看>>
数据约束
查看>>
网络营销第七课(1):制定SEO计划(网站相关数据分析)
查看>>
nginx rewrite 参数和例子
查看>>
mysqldump命令
查看>>
github上传代码步骤
查看>>
利用express搭建一个restful api 服务器
查看>>
(转)调整.NET控件WebBrowser的默认浏览器内核版本
查看>>
[导入]让你的WAP网站有更好的兼容性
查看>>
.NET Exceptionless 本地部署踩坑记录
查看>>
航电OJ-2544最短路
查看>>
CF772E Verifying Kingdom
查看>>
雨林木风U盘装系统综合教程
查看>>
V-by-one
查看>>
让我欲罢不能的node.js
查看>>
python3基础知识学习记录
查看>>
10年.NET老程序员推荐的7个开发类工具
查看>>
C#核心编程结构(2)
查看>>
rename设计思想(Perl版)
查看>>