现在给别人做网站,阜阳哪里做网站,wordpress微商货源,找做废薄膜网站文章目录 1.简介2.语法节键值对注释大小写空白行数据类型字符串 (String)整数 (Integer)浮点数 (Float)布尔值 (Boolean)列表 (List) 3.示例4.解析参考文献 1.简介
INI 的全称是 Initialization#xff0c;即为初始化文件#xff0c;最早是 Windows 系统配置文件所采用的格式… 文章目录 1.简介2.语法节键值对注释大小写空白行数据类型字符串 (String)整数 (Integer)浮点数 (Float)布尔值 (Boolean)列表 (List) 3.示例4.解析参考文献 1.简介
INI 的全称是 Initialization即为初始化文件最早是 Windows 系统配置文件所采用的格式。
有时候INI 文件也会以不同的扩展名出现如 .cfg、.conf、或 .txt。但为了可读性不建议这么做。
因为 INI 并没有一个统一的官方标准所以这里介绍常见的 INI 文件格式惯例。
2.语法
INI 是一种简单实用且应用广泛的配置文件格式通常由节、键值对和注释组成。
节
节Section是键值对的分组。
一般情况下节是可选的不属于任何节的配置项属于全局配置项。
所有的 Section 名称都是独占一行并且 Section 名字都被方括号 [] 包围。在 Section 声明后的所有键值对都属于该 Section。一个 Section 没有明显的结束标识符一个 Section 的开始就是上一个 Section 的结束。
[section]注意不同节之间的变量可以同名。
正因为没有显式的“节结束符”例如 XML 的/tag。因此节在语法上不能任意嵌套。必要时可以将层次结构扁平化使用分隔符分隔多个节名通常使用点 . 分隔来实现嵌套。一级嵌套通常是支持的称为子节。
[section]
domain example.com[section.subsection]
foo bar键值对
每一个键值对表示一项配置键与值使用等号分隔。
namevalue注释
注释以分号;开头有一些 INI 管理器也支持使用井号#来注释。
; this is comment text大小写
Windows 中的节和键名是不区分大小写的。大多数 Unix 风格的 INI 解析器也完全不区分大小写。
尽管部分 INI 解析器是支持大小写的但为了良好的可读性不建议这么做。
空白行
空白行通常被忽略可以用来提高可读性。
数据类型
INI 文件格式的设计非常简单不像 YAML、TOML 等更现代的配置文件格式那样明确支持多种数据类型。通常INI 文件中的所有数据都是以字符串的形式存储的。然而不同的解析器可能会尝试根据内容自动识别并转换数据类型。
字符串 (String)
默认情况下所有值都被视为字符串。字符串值可以包含任何字符。
字符串值通常不需要引号但在某些情况下可以使用引号单引号或双引号括起来。
key1value1
key2some text with spaces
key3quoted string整数 (Integer)
一些解析器会尝试将纯数字的值解析为整数。
key142
key2-3浮点数 (Float)
类似地包含小数点的数字可能会被解析为浮点数。
[Section]
key13.14
key2-0.001布尔值 (Boolean)
常见的布尔值表示法包括 true, false, yes, no, 1, 和 0。许多解析器会自动将这些值转换为布尔类型。
key1true
key2no
key31
key40列表 (List)
虽然 INI 文件格式本身不直接支持列表但可以通过使用分隔符如逗号或分号来模拟列表。某些解析器可以将这些值分割成列表。
key1value1,value2,value3
key2item1;item2;item33.示例
由于没有官方标准建议在使用 INI 文件时遵循你所使用的解析器的具体规范并保持文件结构的简单和一致。
以下是一个综合示例
; Global section settings
globalKey1value1[Section1]
# Section1 specific settings
key1value1
key2value2[Section2]
key1value3 # Section2 specific settings
key3value44.解析
下面是一个使用键值对表示的后台服务配置。
; server basic conf
[server]
nameUserProfileServer
maxconns10000
queuecap10000
queuetimeout300# log conf
[log]
loglevelERROR
logsize10M
lognum10
logpath/usr/local/app/log在解析上面的配置时可以按行读取然后放到 map 中。
下面以 Go 为例完成对上面配置文件的解析。
package mainimport (bufioerrorsfmtioosstrings
)func ParseConf(confPath string) (map[string]string, error) {if confPath {return nil, errors.New(param is ill)}f, err : os.Open(confPath)if err ! nil {return nil, err}defer f.Close()// store config infom : make(map[string]string)bfRd : bufio.NewReader(f)// read by line, the line terminator is \nfor {line, err : bfRd.ReadString(\n)if err io.EOF {return m, nil}if err ! nil {return nil, err}// ignore blank lineif strings.TrimSpace(line) {continue}// ignore comment lineif strings.TrimSpace(line)[0] ; || strings.TrimSpace(line)[0] # {continue}// ignore section lineif strings.TrimSpace(line)[0] [ {continue}kv : strings.Split(strings.TrimSpace(line), )if len(kv) 2 {m[kv[0]] kv[1]}}
}func main() {conf, _ : ParseConf(server.ini)for k, v : range conf {fmt.Printf(%v%v\n, k, v)}
}运行结果
nameUserProfileServer
maxconns1000
queuecap10000
queuetimeout300
loglevelERROR
logsize10M
lognum10推荐使用专业的第三方库来完成 INI 的解析比如 Golang 中强大的 spf13/viper。
package mainimport (fmtgithub.com/spf13/viper
)func main() {// 设置配置文件的名称和路径viper.SetConfigName(server.ini) // 可以不写文件扩展名viper.AddConfigPath(..) // 在当前目录查找配置文件// 设置配置文件类型为 INIviper.SetConfigType(ini)// 读取配置文件if err : viper.ReadInConfig(); err ! nil {fmt.Printf(Error reading config file, %s, err)return}// 获取配置项的值fmt.Println(server.name:, viper.GetString(server.name))fmt.Println(server.maxconns:, viper.GetInt(server.maxconns))fmt.Println(server.queuecap:, viper.GetInt(server.queuecap))fmt.Println(server.queuetimeout:, viper.GetInt(server.queuetimeout))fmt.Println(log.loglevel:, viper.GetString(log.loglevel))fmt.Println(log.logsize:, viper.GetString(log.logsize))fmt.Println(log.lognum:, viper.GetInt(log.lognum))fmt.Println(log.logpath:, viper.GetString(log.logpath))
}运行结果
server.name: UserProfileServer
server.maxconns: 10000
server.queuecap: 10000
server.queuetimeout: 300
log.loglevel: ERROR
log.logsize: 10M
log.lognum: 10
log.logpath: /usr/local/app/log参考文献
INI file - wikipedia Apache Documentation for org.apache.commons.configuration2.INIConfiguration