toml放弃了括号或缩进的底层原理,采用了显示键名链的方式。
为了方便,可以指定小节名(小节名也是可以链式声明的)
在互联网上传输 TOML 文件时,恰当的 MIME 类型是
application/toml
注释
使用#
来表示注释开始,至当前行尾结束
# I am a comment. Hear me roar. Roar .
字符串
TOML中有4中字符串表示方法:基本、多行-基本、字面量、多行-字面量
基本字符串
由双引号包裹,所有Unicode字符均可出现,除了双引号、反斜线、控制字符(U+0000 to U+001F)需要转义
str = "I'm a string. \"You can quote me \"."
多行-基本字符串
由三个双引号包裹,除了分隔符开始的换行外,字符串内的换行将被保留
str1 = """
Roses ard red
Violets are blue"""
字面量字符串
由单引号包裹,其内不允许转义,因此可以方便的表示基本字符串中需要转义的内容
winpath = 'C:\Users\nodejs\templates'
多行-字面量字符串
与多行-字面量字符串
str1 = '''
Roses ard red
Violets are blue'''
数值与bool值
int1 = +99
flt3 = -0.01
bool1 = true
日期时间
date1 = 1979-05-27T07:32:00Z
数组
数组使用方括号包裹。空格会被忽略,包括换行符。元素使用括号分隔
arr1 = [ 1, 2, 3 ]
arr2 = [ "red", "yellow", "green" ]
arr3 = [ [ 1, 2 ], [3, 4, 5] ]
表格
表格称为哈希表或字典,用来存储键值对。表格名由方括号包裹,且自成一行
[dog]
onekey = onevalue
[dog.tater]
type = "pug"
示例:使用toml配置文件链接数据库
toml配置文件的内容
[dbservers.test]
host = "127.0.0.1"
port = 5432
dbname = "test"
user = "loginuser"
password = "123456"
[dbservers.dborm]
host = "127.0.0.1"
port = 5432
dbname = "test"
user = "loginuser"
password = "123456"
[dbservers.dbsqlx]
host = "127.0.0.1"
port = 5432
dbname = "test"
user = "loginuser"
password = "123456"
[redisservers.redis]
addr = "127.0.0.1:6379"
password = ""
db = 10
举个例子 dbservers.test。对于dbservers这个是下面配置信息中代表Config结构体中的DBServers部分。而.后面代表的则是map中的key。
config数据库的配置信息
首先toml对应的是一个Config的结构体、以下是结构体的代码
type Config struct {
DBServers map[string]DBServer `toml:"dbservers"`
RedisServers map[string]RedisServer `toml:"redisservers"`
}
// DBServer 表示DB服务器配置
type DBServer struct {
Host string `toml:"host"`
Port int `toml:"port"`
DBName string `toml:"dbname"`
User string `toml:"user"`
Password string `toml:"password"`
}
// RedisServer 表示 redis 服务器配置
type RedisServer struct {
Addr string `toml:"addr"`
Password string `toml:"password"`
DB int `toml:"db"`
}
配置解析文件
可以利用github.com/bbangert/toml
包对toml文件进行解析
// New 解析toml配置
func New(tomlFile string) (*Config, error) {
c := &Config{}
if _, err := toml.DecodeFile(tomlFile, c); err != nil {
return c, err
}
return c, nil
}