toml文及其解析方法(golang)
tomal简介
参考文档:https://github.com/toml-lang/toml#user-content-offset-date-time
TOML 旨在成为一个语义显著而易于阅读的最低限度的配置文件格式。
TOML 被设计地能够无歧义地转化为哈希表。
TOML 应当能简单地解析成形形色色的语言中的数据结构。
TOML 是大小写敏感的。
TOML 文件必须是有效的 UTF-8 编码的 Unicode 文档。
空白的意思是 Tab(0x09)或空格(0x20)。
换行的意思是 LF(0x0A)或 CRLF(0x0D 0x0A)。
示例
# 这是一个 TOML 文档。
title = "TOML 示例"
[owner]
name = "//汤姆·普雷斯顿—维尔纳" # 键名和键值周围的空白会被忽略, 有键必须有值,键值对后必须换行
dob = 1979-05-27T07:32:00-08:00 # 第一类日期时刻
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000 # 键名可以是裸露的,引号引起来的,或点分隔的。裸键只能包含 ASCII 字母,ASCII 数字,下划线和短横线(A-Za-z0-9_-)
enabled = true
[servers]
# 允许缩进(Tab 和/或空格),不过不是必要的
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma", "delta"], [1, 2] ]
# 数组中是可以换行的
hosts = [
"alpha",
"omega"
]
[[products]]
name = "Hammer"
sku = 738594937
[[products]]
[[products]]
name = "Nail"
sku = 284758393
color = "gray"
类似于json
{
“title“:"TOML 示例”
“owner”:{”name“:”/汤姆·普雷斯顿—维尔纳“, ”dob“:”1979-05-27T07:32:00-08:00“},
”database“:{”server“: "192.168.1.1",”ports“:[ 8001, 8001, 8002 ],”connection_max”:5000,“enabled”:true},
"servers": {"alpha":{"ip":"10.0.0.1","dc":"eqdc10" }, "beta": { "ip": "10.0.0.2", dc:"eqdc10" }}},
"clients": { data:[["gamma", "delta"], [1, 2]] },
"hosts": ["alpha","omega"],
"products": [
{ "name": "Hammer", "sku": 738594937 },
{ },
{ "name": "Nail", "sku": 284758393, "color": "gray" }
]
}
任何 Unicode 字符都可以使用,除了那些必须转义的:引号,反斜杠,以及除 Tab 外的控制字符。
想书写长字符串却不想引入无关空白,可以用“行末反斜杠”。
当一行的最后一个非空白字符是一个未转义的 \ 时,它会连同它后面的所有空白(包括换行)一起被去除,直到下一个非空白字符或结束引号为止。
organization = """\\GitHub \
asdfsadf"""
解析结果:\GitHub asdfsadf
MIME 类型
在互联网上传输 TOML 文件时,恰当的 MIME 类型是 application/toml。
golang 使用 toml
截止当前时间, github star 13.5k, https://github.com/toml-lang/toml
go | toml |
---|---|
go1.13.5 | v0.3.1 |
example.toml
# This is a TOML document. Boom.
title = "TOML Example"
[owner]
name = "Tom Preston-Werner"
organization = """\\GitHub \
asdfsadf"""
bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
dob = 1979-05-27T07:32:00Z # First class dates? Why not?
[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true
[servers]
# You can indent as you please. Tabs or spaces. TOML don't care.
[servers.alpha]
ip = "10.0.0.1"
dc = "eqdc10"
[servers.beta]
ip = "10.0.0.2"
dc = "eqdc10"
[clients]
data = [ ["gamma","","","","", "delta","1 s"," # ", "1"," "], [1, 2] ] # just an update to make sure parsers support it
# Line breaks are OK when inside arrays
hosts = [
"alpha",
"omega"
]
example.go
package main
import (