1.前言
在常见的编程领域中,程序读取指定格式的配置文件、以此应用不同的配置,是一种非常常见的行为。
比如很多应用程序的设置项,实际上就保存在了配置文件中,你对该程序的所有修改,最终都会被写入配置文件中,程序在启动时通过读取该配置文件,便能应用你所选择的所有配置项。
配置文件仅仅是一种文本格式,即使你使用txt文本也是可以的,但为了利于大家交流、数据交换之类的需求,便出现了一些特定的配置文件格式,我们常常以文件后缀名对其进行区分。
而toml格式的配置文件便是当前非常流行的一种格式文件,比如rust语言中的配置文件,大都使用的是toml格式,用于配置程序所需要的信息、依赖库等等。
2.基本语法
一般toml格式的配置文件,后缀名都为.toml
,比如rust语言中的配置文件Cargo.toml
:
它的基本组成是由键与值对应的:
key = value
前者key为配置项的名字,后面的value则为该配置项的值。
虽然按照官方文档的说明,key可以有多种写法,但大多数都推荐你直接写键名,而不要去添加引号、乃至不填。
所以真正要关注的其实是value,虽然大多数时候value可能都是填字符串,那么你需要用双引号将其引起来。
website = "www.kucoding.com"
但实际上你依旧可以填数字、布尔、数组、乃至时间:
age = 2
is_new = true
is_old = false
cur_time = 2024-10-17
colors = [ "红", "黄", "绿" ]
而如果你想要配置对象类型的数据,那么就需要用到表结构:
[site]
website = "www.kucoding.com"
age = 2
is_new = true
is_old = false
cur_time = 2024-10-17
colors = [ "红", "黄", "绿" ]
方式就是用中括号将表名括起来,放在其它键值对的最前方。
但也可以将其内联,使其看起来更像是一个键值对的对象:
site = { website="www.kucoding.com", age=2 }
如果你希望定义表数组,或者换句话来说,你想要定义js中的对象数组,那么你可以这样做:
[[site]]
website = "www.kucoding.com"
age = 2
is_new = true
[[site]]
website = "www.kucoding1.com"
age = 4
is_new = false
也就是用两个中括号将其括起来,此时每一次定义表,都是在往该名字为site的数组里面插入一个对象。
类似于json中的下面这样的结构:
"site": [
{ "website": "www.kucoding.com", "age": 2, "is_new": true },
{ "website": "www.kucoding1.com", "age": 4, "is_new": false }
]
除此之外,子表也用的比较多,其基本语法就是点.
,只要用了点,那就是在定义子表结构:
[table]
a.b = "test"
上面的这个例子转换为json格式就是:
"table":{
"a":{
"b":"test"
}
}
放在表名上也是一样的,下面的写法和上面等价:
[table.a]
b = "test"
除了基本结构外,toml格式配置文件另一大特点便是支持注释,只需要写在#
符号后面即可,和bash脚本一样:
# 这是注释
# 这是注释
以上便是toml中最常见的语法,这些结构在各种语言中都是有对应库可以直接将其映射为内部结构的。
如果你想要了解更加详细的规则,那么可以参考官方文档:toml