GO系列-ini文件处理
gopkg.in/ini.v1
配置加载
创建一个空的配置
cfg := ini.Empty()
直接加载存在的配置文件,如果文件不存在就会报错
cfg, err := ini.Load("app.ini")
可以同时加载多个配置文件,后面的配置文件键值会覆盖前面一个
cfg, err := ini.Load("app.ini", "app_dev.ini")
不能够确定其中哪些文件是不存在的,可以通过调用函数 LooseLoad() 来忽略它们。
cfg, err := ini.LooseLoad("app.ini", "app_dev.ini")
跳过无法识别的数据行
cfg, err := ini.LoadSources(ini.LoadOptions{SkipUnrecognizableLines: true}, "other.ini")
保存配置
比较原始的做法是输出配置到某个文件:
err = cfg.SaveTo("app.ini")
保存时调整缩进
err = cfg.SaveToIndent("app.ini", "\t")
操作分区
获取制定分区的对象
sec, err := cfg.GetSection("db")
如果想要获取默认分区,则可以用空字符串代替分区名:
sec, err := cfg.GetSection("")
相对应的,还可以使用 ini.DEFAULT_SECTION 来获取默认分区:
sec, err := cfg.GetSection(ini.DEFAULT_SECTION)
当您非常确定某个分区是存在的,可以使用以下简便方法:
sec := cfg.Section("section name")
如果不存再,会自动创建并返回一个对应的分区对象。
创建一个分区:
err := cfg.NewSection("new section")
获取所有分区对象或名称:
secs := cfg.Sections()
names := cfg.SectionStrings()
操作键
key, err := cfg.Section("").GetKey("key name")
和分区一样,您也可以直接获取键而忽略错误处理:
key := cfg.Section("").Key("key name")
判断某个键是否存在:
yes := cfg.Section("").HasKey("key name")
创建一个新的键:
err := cfg.Section("").NewKey("name", "value")
获取分区下的所有键或键名:
keys := cfg.Section("").Keys()
names := cfg.Section("").KeyStrings()
获取分区下的所有键值对的克隆:
hash := cfg.Section("").KeysHash()
操作键值
获取一个类型为字符串(string)的值:
val := cfg.Section("").Key("key name").String()
获取值的同时通过自定义函数进行处理验证:
val := cfg.Section("").Key("key name").Validate(func(in string) string {
if len(in) == 0 {
return "default"
}
return in
})
如果不需要任何对值的自动转变功能(例如递归读取),可以直接获取原值(这种方式性能最佳):
val := cfg.Section("").Key("key name").Value()
判断某个原值是否存在:
yes := cfg.Section("").HasValue("test value")
获取其它类型的值:
// 布尔值的规则:
// true 当值为:1, t, T, TRUE, true, True, YES, yes, Yes, y, ON, on, On
// false 当值为:0, f, F, FALSE, false, False, NO, no, No, n, OFF, off, Off
v, err = cfg.Section("").Key("BOOL").Bool()
v, err = cfg.Section("").Key("FLOAT64").Float64()
v, err = cfg.Section("").Key("INT").Int()
v, err = cfg.Section("").Key("INT64").Int64()
v, err = cfg.Section("").Key("UINT").Uint()
v, err = cfg.Section("").Key("UINT64").Uint64()
v, err = cfg.Section("").Key("TIME").TimeFormat(time.RFC3339)
v, err = cfg.Section("").Key("TIME").Time() // RFC3339
v = cfg.Section("").Key("BOOL").MustBool()
v = cfg.Section("").Key("FLOAT64").MustFloat64()
v = cfg.Section("").Key("INT").MustInt()
v = cfg.Section("").Key("INT64").MustInt64()
v = cfg.Section("").Key("UINT").MustUint()
v = cfg.Section("").Key("UINT64").MustUint64()
v = cfg.Section("").Key("TIME").MustTimeFormat(time.RFC3339)
v = cfg.Section("").Key("TIME").MustTime() // RFC3339
// 由 Must 开头的方法名允许接收一个相同类型的参数来作为默认值,
// 当键不存在或者转换失败时,则会直接返回该默认值。
// 但是,MustString 方法必须传递一个默认值。
v = cfg.Section("").Key("String").MustString("default")
v = cfg.Section("").Key("BOOL").MustBool(true)
v = cfg.Section("").Key("FLOAT64").MustFloat64(1.25)
v = cfg.Section("").Key("INT").MustInt(10)
v = cfg.Section("").Key("INT64").MustInt64(99)
v = cfg.Section("").Key("UINT").MustUint(3)
v = cfg.Section("").Key("UINT64").MustUint64(6)
v = cfg.Section("").Key("TIME").MustTimeFormat(time.RFC3339, time.Now())
v = cfg.Section("").Key("TIME").MustTime(time.Now()) // RFC3339
操作注释
下述几种情况的内容将被视为注释:
所有以 # 或 ; 开头的行
所有在 # 或 ; 之后的内容
分区标签后的文字 (即 [分区名] 之后的内容)
如果你希望使用包含 # 或 ; 的值,请使用 ` 或 """ 进行包覆。
除此之外,还可以通过 LoadOptions 完全忽略行内注释:
cfg, err := ini.LoadSources(ini.LoadOptions{
IgnoreInlineComment: true,
}, "app.ini")
或要求注释符号前必须带有一个空格:
cfg, err := ini.LoadSources(ini.LoadOptions{
SpaceBeforeInlineComment: true,
}, "app.ini")
GO系列-ini文件处理的更多相关文章
- 【HANA系列】SAP HANA的ini文件存储路径
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA的ini文件存储 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- C#读取ini文件的方法
最近项目用到ini文件,读取ini文件,方法如下: using System; using System.Collections.Generic; using System.Linq; using S ...
- IIS不能下载ini文件
1.打开IIS. 2.选择站点或者存放*.ini文件的目录,右键菜单中选择属性. 3.选择“HTTP头”选项卡. 4.点击“MINE类型”. 5.点击“新建”. 6.这是跳出一个对话框,在“扩展名”一 ...
- c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)
c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ...
- 伪静态重写模块rewrite.dll及httpd.ini文件参考下载
伪静态重写模块rewrite.dll及httpd.ini文件参考下载 http://www.ledaokj.com/download/rewrite.rar 服务器端开启伪静态,可以查看以下文章< ...
- c#读取INI文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- 创建Unicode格式的INI文件
前段时间由于开发一个软件,需要调用别人的接口,虽然我的软件是Unicode编码,对方的模块也是Unicode编码,但是对方提供的接口却是Ansi接口,在非中文系统下,由于涉及到中文路径,导致Ansi和 ...
- 【vbs】vbs写ini文件
这两天在折腾给一个项目打安装包,第一次接触软件打包,用的Advanced Installer(以下简称AI),应该说如果安装过程没有特殊动作(常规动作指释放文件.写注册表.建快捷方式等)的话,倒挺傻瓜 ...
随机推荐
- Docker学习(12) Dockerfile构建过程
Dockerfile的构建过程 以上为构建缓存
- GO语言的JSON02---反序列化
package main import ( "encoding/json" "fmt" ) type Human struct { Name string Ag ...
- 调试动态加载的js
用浏览器无法调试异步加载页面里包含的js文件.简单的说就是在调试工具里面看不到异步加载页面里包含的js文件 最近在一个新的web项目中开发功能.这个项目的管理界面有一个特点,框架是固定的,不会刷新 ...
- Mapper注解与MapperScan注解
1.Mapper注解 在接口类上添加@Mapper,在运行时动态代理生成实现类 @Mapper public interface UserDao { // User getUser(); } 如果想要 ...
- 将TVM集成到PyTorch
将TVM集成到PyTorch 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.PyTo ...
- 激光SLAM与视觉SLAM的特点
激光SLAM与视觉SLAM的特点 目前,SLAM技术被广泛运用于机器人.无人机.无人驾驶.AR.VR等领域,依靠传感器可实现机器的自主定位.建图.路径规划等功能.由于传感器不同,SLAM的实现方式也有 ...
- gpgpu-sim卡分配程序设计实例分析
gpgpu-sim卡分配程序设计实例分析 运行代码地址:https://github.com/gpgpu-sim/gpgpu-sim_distribution 一.概述 此文件包含有关安装.生成和运行 ...
- 深度学习Dropout技术分析
深度学习Dropout技术分析 什么是Dropout? dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机 ...
- python应用_读取Excel数据列表输出【一】
python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 1.准备Excel数据如下: 2.下面主要是对Excel数据读取后以双列表(每一行是一个用例为一个列表,再一个个案例组 ...
- 【VBS】获取文件夹大小
文件截图: 运行结果: 第一步:编写脚本 GetFloderSize.vbs 1 '获得文件夹的大小 by 王牌飞行员(https://www.cnblogs.com/KMould/p/1233481 ...