toml文及其解析方法(golang)

本文介绍了TOML的基本概念,包括其特点、示例和MIME类型,并重点讲解了在Golang中如何使用TOML,包括基本的解析方法如StrictDecoding和Unmarshal,以及如何将解析结果绑定到自定义结构体上。
摘要由CSDN通过智能技术生成

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 (
	
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值