golang中goconfig包使用解析
注意事项 本博客隶属于 goconfig - 课时 1:goconfig 使用解析 请注意配套使用。 本博文为 goconfig - Go 语言 INI 解析器的配套博客,旨在通过文字结合代码示例对该库的使用方法和案例进行讲解,便于各位同学更好地使用和深入了解。 库简介goconfig 是一个由 Go 语言开发的针对 Windows 下常见的 INI 格式的配置文件解析器。该解析器在涵盖了所有 INI 文件操作的基础上,又针对 Go 语言实际开发过程中遇到的一些需求进行了扩展。相对于其它 INI 文件解析器而言,该解析器最大的优势在于对注释的极佳支持;除此之外,支持多个配置文件覆盖加载也是非常特别但好用的功能。 下载安装您可以通过以下两种方式下载安装 goconfig: gopm get github.com/Unknwon/goconfig
或 go get github.com/Unknwon/goconfig
API 文档请移步 Go Walker。 基本使用方法示例代码 一般来说,INI 格式的文件均以 加载配置文件要操作某个配置文件,需要先将其加载到内存中,我们需要调用 cfg,err := goconfig.LoadConfigFile("conf.ini") 配置文件的文件名可以写相对路径或绝对路径,该函数返回值分别为 基本读写操作通过 value,err := cfg.GetValue(goconfig.DEFAULT_SECTION,"key_default") 第一个返回值为 string 类型,即取到的值;第二个返回值为 error 类型,当发生错误时不为 nil。 除了读取之外,还可以进行设置值操作: isInsert := cfg.SetValue(goconfig.DEFAULT_SECTION,"key_default","这是新的值")
该方法返回值类型为 bool 类型,表示是否为插入操作。如果值为 true,表明该键之前未存在,现在插入成功;否则表示该键之前已经存在,它的值现在被重写了。 如果您觉得每次都调用 value,err = cfg.GetValue("","key_default") 以上代码也可以达到相同的效果。 除了使用等号作为键值之间的分隔符之外,冒号也是允许的: key_super2 : 测试值
注释读写操作虽然大多数情况下程序都只从 INI 文件进行数据的读取操作,但偶尔会需要实现写入到文件的操作。此时,其余所有的解析器都会将注释给过滤掉;当注释是配置文件各项说明的重要依据时,这种做法显然是不可取的。因此,完整地保存文件中的注释,并提供在程序中对注释进行操作的 API 不可谓不是 goconfig 的一大特色。 goconfig 允许您的配置文件以分号 ; 以分号开头的均为注释行
# 以井号开头的也为注释行
但不可以在某一行的中间: key_default = 默认节的一个键 # 注释必须单独占行,此处的注释无效 通过 goconfig 提供的 API,您可以操作某个分区或键的注释。 获取某个分区的注释: comment := cfg.GetSectionComments("super") 获取某个键的注释: comment = cfg.GetKeyComments("super","key_super")
这两个方法均返回 string 类型的返回值。 设置某个键的注释: v := cfg.SetKeyComments("super","key_super","# 这是新的键注释") 设置某个分区的注释: v = cfg.SetSectionComments("super","# 这是新的分区注释")
上面两个方法的返回值都是 bool 类型。若为 true 表示注释被插入或删除(当传入的参数为空字符串时);为 false 表示注释已存在,现在被重写。 类型转换读取goconfig 提供以类型命名的一些方法,例如 vInt,err := cfg.Int("must","int") 第一个返回值为 int 类型,第二个返回值为 error 类型。 Must 系列方法Must 系列方法是用于避免检查 error 类型所造成的代码臃肿,简化数据获取流程。这些方法均已 vBool := cfg.MustBool("must","bool") 该方法返回值为 bool 类型。 删除指定键值当您想要抛弃某个键时,可以通过 ok := cfg.DeleteKey("must","string") 该方法返回值为 bool 类型,用于表示删除操作是否成功(若键不存在则会表示为不成功)。 保存配置文件当完成操作需要将数据写回硬盘时,可以使用 err = goconfig.SaveConfigFile(cfg,"conf_save.ini")
您需要指定要保存的对象和文件名,该方法返回一个 error 类型的值。 高级使用技巧示例代码 上一小结展示了如果使用 goconfig 完成常见的 INI 文件操作,本小节则将着重介绍 goconfig 库为大家带来的一些扩展功能。 多文件覆盖加载函数 cfg,err := goconfig.LoadConfigFile("conf.ini","conf2.ini") 在本例中,如果 如果在程序运行途中发现需要增加配置文件,则可通过方法 err = cfg.AppendFiles("conf3.ini")
配置文件重载若外部文件发生修改,可通过调用方法进行快速重载: err = cfg.Reload()
该方法返回一个 error 类型的值表示操作是否成功。 为 Must 系列方法设置缺省值借助 Go 语言变参的功能,当 Must 系列方法拥有三个参数时,则第三个参数即为获取失败时的默认值: vBool := cfg.MustBool("must","bool404",true) 本例中键名为 递归读取键值在文件 google=www.google.com search=http://%(google)s 当您使用 子孙分区覆盖读取在文件 [parent] name=john relation=father sex=male age=32 [parent.child] age=3 当我们获取 自增键名获取在文件 [auto increment] -=hello -=go -=config 由于使用 #1: hello #2: go #3: config 要注意的是,计数只在同个分区内有效,新的分区又会从 1 开始重新计数。 获取整个分区如果您想要直接操作某个分区,可通过方法 sec,err := cfg.GetSection("auto increment") 总结goconfig 包的 API 提供非常全面,用法非常简单,但核心代码并不多,各位同学有兴趣的可以阅读其源代码。 使用案例
注:本文转自无闻大神的博客,原文链接:http://studygolang.com/wr?u=http%3a%2f%2fwuwen.org%2farticle%2f17%2f01-goconfig-class1.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |