PhalGo-Viper获取配置

#PhalGo-Viper获取配置

viper项目地址:https://github.com/spf13/viper

##什么是viper

viper是国外大神spf13编写的开源配置解决方案,viper拥有一下功能以及特性如下:

  • 设置默认值
  • 从JSON,toml YAML,HCl,和java属性配置文件
  • 从环境变量env读取值
  • 读缓冲区
  • 远程读取配置文件
  • key不区分大小写

##为什么用viper

viper不用担心你的文件格式,可以获取环境变量,也可以从远端获取配置文件,并且还有缓冲机制,功能非常棒非常牛逼,能满足不同的对配置文件的使用的要求,所以PhalGo采用viper来解决配置问题

##初始化Config

PhalGo追求最简单的使用各个组件所以viper我们只需要初始化就可以开始使用,我们只需要调用NewConfig函数需要你传入两个参数,一个是你文件相对于项目目录的相对路径,比如我在项目目录下建立的/conf文件目录就需要填写conf,第二个就是配置文件文件名,只需要名称即可,可以不用输入后缀viper会自动识别.

//初始化配置文件
phalgo.NewConfig("conf", "sys")

比如我们创建了一个sys.toml文件内容如下:

强烈推荐使用toml格式,toml格式介绍:http://mlworks.cn/posts/introduction-to-toml/

[system]
port = ":1234"

[dbDefault]
dbHost = "localhost"           #数据库连接地址
dbName = "phalgo"              #数据库名称
dbUser = "root"                #数据库用户名
dbPasswd = ""                  #数据库密码
dbPort = "3306"                #数据库端口号
dbOpenconns_max = 20           #最大连接数
dbIdleconns_max = 0            #最大空闲连接
dbType = "mysql"               #数据库类型

我们就可以简单的使用

phalgo.Config.GetString("system.port")  #返回一个string类型的":1234"

phalgo.Config和**"github.com/spf13/viper"**是等价的,所以可以通过phalgo.Config来调用viper提供的方法

##Config详解

###设置默认值

phalgo.Config.SetDefault("ContentDir", "content")
phalgo.Config.SetDefault("LayoutDir", "layouts")
phalgo.Config.SetDefault("Taxonomies", map[string]string{"tag": "tags", "category": "categories"})

###获取不同类型配置

  • phalgo.Config.Get(key string) : interface{}
  • phalgo.Config.GetBool(key string) : bool
  • phalgo.Config.GetFloat64(key string) : float64
  • phalgo.Config.GetInt(key string) : int
  • phalgo.Config.GetString(key string) : string
  • phalgo.Config.GetStringMap(key string) : map[string]interface{}
  • phalgo.Config.GetStringMapString(key string) : map[string]string
  • phalgo.Config.GetStringSlice(key string) : []string
  • phalgo.Config.GetTime(key string) : time.Time
  • phalgo.Config.GetDuration(key string) : time.Duration
  • phalgo.Config.IsSet(key string) : bool

###获取多级参数

viper支持获取配置的层级关系,在每个key之间通过"."分割机制,比如上面演示的

phalgo.Config.GetString("system.port")

就是获取的二级参数

##更多

viper提供很多有意思的功能,可以通过开篇viper项目地址进行了解

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ytkah

dedecms建的网站如何去掉/index.html

DEDECMS建立的网站,www.abc.com/index.html和www.abc.com两个都可以访问,而且两个页面都是一样的,这样就会造成重复页面,对搜...

36860
来自专栏Java后端技术

解决jetty7.0.pre5启动时报ClassNotFoundException: javax.interceptor.InvocationContext异常的问题

一.背景介绍:最近项目在使用maven命令行运行jetty服务器时出现ClassNotFoundException: javax.interceptor.Inv...

7910
来自专栏赵俊的Java专栏

Python 文件操作

29230
来自专栏Java成神之路

Java微信开发_03_使用测试号进行开发

今天进行自定义菜单的开发时,发现公众号没有自定义菜单的权限。于是想到用测试号,但微信服务器如何区分你要请求的是公众号还是测试号呢。

8630
来自专栏北京马哥教育

Python 的 ImportError 错误

? 问题 错误:ImportError: No module named XXX 在Python的工程中,偶尔会遇到文件无法引用的情况,即PyCharm ID...

24960
来自专栏Petrichor的专栏

pycharm: 跳转 & 回退

26720
来自专栏Python爬虫与数据挖掘

如何在交互式环境中执行Python程序

相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行、命令行窗口运行、开发工具上运行等,...

15230
来自专栏野路子程序员

从已有安装包(vendor)恢复 composer.json

56250
来自专栏osc同步分享-java技术分享站

hibernate 中对象的状态

load() 和 get() User user = session.get(User.class, "1"); 如上调用get方法后,会向数据库查询id为1的...

30550
来自专栏深度学习之tensorflow实战篇

pycharm 之模块与模块引用

首先在pycharm,创建文件的快捷键ALT+INS,可以将自己常用的模版导入 ? 其次函数的模块调用规则如下图 ? 模块引用并指导源文...

38090

扫码关注云+社区

领取腾讯云代金券