goconfig使用解析

分类: glolang 发布时间: 2018-09-20 05:38:45
goconfig 简介

goconfig 是一个由 Go 语言开发的针对 Windows 下常见的 INI 格式的配置文件解析器。该解析器在涵盖了所有 INI 文件操作的基础上,又针对Go 语言实际开发过程中遇到的一些需求进行了扩展。相对于其它 INI 文件解析器而言,该解析器最大的优势在于 对注释的极佳支持;除此之外,支持 多个配置文件覆盖加载 也是非常特别但好用的功能。


主要特性

提供与 Windows API 一模一样 的操作方式

  • 支持 递归读取 分区

  • 支持 自增键名

  • 支持对 注释的读与写 操作

  • 支持 直接返回指定类型 的键值

  • 支持 多个文件覆盖加载


下载安装

1、通过 gopm 安装:

gopm get github.com/Unknwon/goconfig

2、通过 go get 安装:

go get github.com/Unknwon/goconfig

API 文档:Go Walker


基本使用方法

1、加载配置文件:

cfg, err := goconfig.LoadConfigFile("conf.ini")

2、基本读写操作:

value, err := cfg.GetValue(goconfig.DEFAULT_SECTION,"key_default")
isInsert := cfg.SetValue(goconfig.DEFAULT_SECTION,"key_default", "这是新的值”)

3、注释读写操作:

comment := cfg.GetSectionComments("super")
comment = cfg.GetKeyComments("super", "key_super")
v := cfg.SetKeyComments("super", "key_super", "# 这是新的键注释")
v = cfg.SetSectionComments("super", "# 这是新的分区注释")

4、类型转换读取:

vInt, err := cfg.Int("must", "int")

5、Must 系列方法:

vBool := cfg.MustBool("must", "bool")

6、删除指定键值:

ok := cfg.DeleteKey("must", "string")

7、保存配置文件:

err = goconfig.SaveConfigFile(cfg, "conf_save.ini")


高级使用方法

1、多文件覆盖加载:

cfg, err := goconfig.LoadConfigFile("conf.ini", "conf2.ini")
err = cfg.AppendFiles("conf3.ini")

2、配置文件重载:

err = cfg.Reload()

3、为 Must 系列方法设置缺省值:

vBool := cfg.MustBool("must", "bool404", true)

4、递归读取键值

在文件 conf3.ini 中,默认分区有两个键如下:

google=www.google.com 
search=http://%(google)s

当您使用 %(<key>)s 包含某个键名来作为值的时候,goconfig 会去寻找相应的键的值进行替换;如果被替换的键的值还有这样的嵌套,则会递归执行替换。该操作最多允许 200 层的嵌套。此时,键 search 真正的值为 http://www.google.com。要注意的是,被包含的键可以是位于 DEFAULT 分区或同一分区的,出现顺序任意。

5、子孙分区覆盖读取

在文件 conf3.ini 中,有如下配置:

[parent]
name=john
relation=father
sex=male
age=32
[parent.child]
age=3

当我们获取 parent.child 分区中的键 age 时,我们会得到 3;但当我们想要获取 sex 时,正常情况下应该为获取失败,不过,goconfig 会发现 parent.child 还有父分区 parent,因为 parent.child 使用了半角符号 . 来实现分级。这时候,获取 sex 会得到 male

6、自增键名获取

在文件 conf3.ini 中,有如下配置:

[auto increment]
-=hello
-=go
-=config

由于使用 - 作为键名,则 goconfig 在解析时,会将它翻译成自增数字,从 1 开始。在本例中,上面的键在对象中会被保存为:

#1: hello
#2: go
#3: config

要注意的是,计数只在同个分区内有效,新的分区又会从 1 开始重新计数。

7、获取整个分区:

sec, err := cfg.GetSection("auto increment")