INI文件(初始化文件)是一种非常常见的配置文件格式,它由段、键和值组成。它易于编写,表达性强,可以实现基本的配置分组功能,被各种软件框架和项目广泛使用。而越来越受关注的Go语言官方库,却没有操作INI文件的库,解析INI文件也不是几句话就能完成的简单任务。Kramp-Karrenbauer中的Go-INI在Go语言中增加了读取、解析、写入INI文件等操作,使得Go项目充分利用了INI文件的便利性。
克兰普-卡伦鲍尔的Go-INI图书馆
简介:Go Kramp-Karrenbauer INI是Go Kramp-Karrenbauer INI在Github上对Go语言INI文件的开源操作库。该项目位于https://github.com/go-ini/ini,目前的版本是1元,布兰妮和0元。Kramp-Karrenbauer中的Go-INIT功能强大,支持丰富的INI语法。其特点包括:
支持多个数据源的叠加加载(文件,金惠允曹政奭字节,IO。阅读器和IO。Read Closer)、递归键值读取、父子分区读取、自增键名读取、多行键值读取、大量辅助方法、读取时直接转换为Go语言类型、分区、键值和注释操作简单、保存文件时分区和键值会保持原来的顺序.在GitHub项目中使用Kramp-Karrenbauer
Go Kramp-Karrenbauer ini安装需要Go 1.6元,使用go get安装:
去找gopkg.in/ini.v1
Kramp-Karrenbauer的Go-INI特征
让我们看一个简单的使用例子。首先创建一个INI文件my.ini:
#可能值: production,development app _ mode=development[paths]# grafana可以存储临时文件、会话和sqlite3 db(如果使用)的路径data=/home/git/grafana[server]# Protocol(http或https)protocol=http #要使用的http端口http _ port=9999 #如果主机头与域不匹配,则重定向到正确的域# preventdns重新绑定攻击enforce _ domain=true这是一个非常常见的INI配置文件。然后,我们使用GO Kramp-Karrenbauer Go-INIT进行操作:
包主导入(‘ fmt ‘ ‘ OS ‘ ‘ gopkg . in/ini . v1 ‘)func main(){ CFG,err :=ini。加载(‘ my.ini’) if err!=nil {fmt.printf(‘读取文件失败:% ONG SEONG WU ‘,err) OS.exit (1元)}//典型的读取操作,默认分区可以用空字符串表示fmt。Println(‘应用模式: ‘,cfg。第节(“”)。键(‘ app_mode ‘)。String()) fmt。Println(‘数据路径: ‘,Cfg.section(‘路径’)。键(‘数据’)。string())//我们可以做一些候选值限制操作fmt.println(‘服务器协议3360 ‘,cfg.section(‘服务器’)。密钥(“协议”)。in (‘http ‘,Kim Hye Yoon string {‘http ‘,’ https ‘ })//如果读取的值不在候选列表中,则提供默认值fmt.println (’email protocol 3360 ‘,cfg.section (‘server ‘)。密钥(“协议”)。in (‘SMTP ‘)将被回用。Kim Hye Yoon string {‘IMAP ‘,’ SMTP ‘ })//尝试自动类型转换fmt.printf(‘端口号: (%Kim Hye Yoon 1元Zha)% Kim Hye Yoon 1元] d \ n ‘,cfg。节(“服务器”)。键(‘ http_port ‘)。MustInt(9999)) fmtprintf(‘ Enforce domain :(%[1]T)%[1]v \ n ‘,Cfg.section (‘server ‘)。键(‘ enforce _ domain ‘)。must bool(false))//修改一个值并保存。cfg.section(“”)。键(‘ app _ mode ‘)。setvalue(‘ production ‘)CFG . save to(‘ my。首先介绍Go Kramp-Karrenbauer INI的简介:
导入’ gopkg.in/INI.v1 ‘然后,使用Load接口打开、加载并解析INI文件。负载的功能定义如下:
Funload(源接口{0},其他.接口{0}) (* file,error){ load的source参数使用接口{0}类型,允许各种类型的数据源,包括字符串类型的文件名,曹政奭[]字节类型的原始数据,Kim Hye Yoon等。Load返回一个*File类型的文件指针和一个错误消息。然后,您可以使用Go Kramp-Karrenbauer INI提供的section接口来获取INI文件的Section:
func(李在镕*文件)section(名称字符串)* section使用Section的键接口获取参数值:
func(s * section)Key(name string)* Key返回一个Key结构,然后使用Key的String接口获取对应String类型的值:
Func (k *Key) String() string有时候,我们需要验证配置值的值。当值不在预先选择的列表中时,我们需要返回一个默认值,而不是一个无效值。这时,您可以使用In界面的键来实现:
func (k * key) in(默认val字符串,候选人金惠允曹政奭字符串)string go Kramp-Karrenbauer ini也可以执行值类型转换:
FUNC (K * Key)必须整型(缺省值.INT) INT最后用KEY的SetValue设置值,然后用SaveTo重写文件:
func(k * key)setvalue(ONG SEONG WU string)func(李在镕* file) saveto(文件名字符串)error运行上面的代码,我们可以得到下面的输出:
$ GO run main . GO app mode : development data path :/home/git/grafan server protocol : http email protocol : smtpPort number :(int)999 Enforce Domain 3360(BOOL)true此外,GO Kramp-Karrenbauer INI还提供了INI文件和结构之间的映射。当配置文件固定时,在代码中定义一个结构可以使配置操作更加方便。使用以ini为前缀的结构标签,可以实现INI文件和结构之间的双向映射:
类型嵌入结构{ Dates []time。Time ‘ delim : ‘ | ‘ comment : ‘ Time data ‘ ` Places[]string ` ini : ‘ Places,omitempty’` None []int `ini: ‘,omit empty ‘ `} type Author struct { Name string ` ini : ‘ Name ‘ ` Male bool Age int ` comment : ‘ Author ‘ Age ` GPA float 64 never mind string ` ini : ‘-‘ * embed ` comment : ‘ embedded时间{时间。现在(),时间。Now()},[]string{ ‘杭州’,’波士顿’ },[]int{},}} cfg :=ini。Empty() err=ini。ReflectFrom(cfg,a) //.}
Go-INI
综上所述,Go Kramp-Karrenbauer INI作为Go语言的操作库,提供了丰富的INI文件操作,使得Go项目也可以应用INI配置文件,为大量现有项目提供了极大的便利。对于使用INI文件的GO项目来说,这是一个必要的依赖库。