toml放弃了括号或缩进的底层原理,采用了显示键名链的方式。
为了方便,可以指定小节名(小节名也是可以链式声明的)

在互联网上传输 TOML 文件时,恰当的 MIME 类型是 application/toml

注释

使用#来表示注释开始,至当前行尾结束

  1. # I am a comment. Hear me roar. Roar .

字符串

TOML中有4中字符串表示方法:基本、多行-基本、字面量、多行-字面量

基本字符串

由双引号包裹,所有Unicode字符均可出现,除了双引号、反斜线、控制字符(U+0000 to U+001F)需要转义

  1. str = "I'm a string. \"You can quote me \"."

多行-基本字符串

由三个双引号包裹,除了分隔符开始的换行外,字符串内的换行将被保留

  1. str1 = """
  2. Roses ard red
  3. Violets are blue"""

字面量字符串

由单引号包裹,其内不允许转义,因此可以方便的表示基本字符串中需要转义的内容

  1. winpath = 'C:\Users\nodejs\templates'

多行-字面量字符串

与多行-字面量字符串

  1. str1 = '''
  2. Roses ard red
  3. Violets are blue'''

数值与bool值

  1. int1 = +99
  2. flt3 = -0.01
  3. bool1 = true

日期时间

  1. date1 = 1979-05-27T07:32:00Z

数组

数组使用方括号包裹。空格会被忽略,包括换行符。元素使用括号分隔

  1. arr1 = [ 1, 2, 3 ]
  2. arr2 = [ "red", "yellow", "green" ]
  3. arr3 = [ [ 1, 2 ], [3, 4, 5] ]

表格

表格称为哈希表或字典,用来存储键值对。表格名由方括号包裹,且自成一行

  1. [dog]
  2. onekey = onevalue
  3. [dog.tater]
  4. type = "pug"

示例:使用toml配置文件链接数据库

toml配置文件的内容

  1. [dbservers.test]
  2. host = "127.0.0.1"
  3. port = 5432
  4. dbname = "test"
  5. user = "loginuser"
  6. password = "123456"
  7. [dbservers.dborm]
  8. host = "127.0.0.1"
  9. port = 5432
  10. dbname = "test"
  11. user = "loginuser"
  12. password = "123456"
  13. [dbservers.dbsqlx]
  14. host = "127.0.0.1"
  15. port = 5432
  16. dbname = "test"
  17. user = "loginuser"
  18. password = "123456"
  19. [redisservers.redis]
  20. addr = "127.0.0.1:6379"
  21. password = ""
  22. db = 10

举个例子 dbservers.test。对于dbservers这个是下面配置信息中代表Config结构体中的DBServers部分。而.后面代表的则是map中的key。

config数据库的配置信息

首先toml对应的是一个Config的结构体、以下是结构体的代码

  1. type Config struct {
  2. DBServers map[string]DBServer `toml:"dbservers"`
  3. RedisServers map[string]RedisServer `toml:"redisservers"`
  4. }
  5. // DBServer 表示DB服务器配置
  6. type DBServer struct {
  7. Host string `toml:"host"`
  8. Port int `toml:"port"`
  9. DBName string `toml:"dbname"`
  10. User string `toml:"user"`
  11. Password string `toml:"password"`
  12. }
  13. // RedisServer 表示 redis 服务器配置
  14. type RedisServer struct {
  15. Addr string `toml:"addr"`
  16. Password string `toml:"password"`
  17. DB int `toml:"db"`
  18. }

配置解析文件

可以利用github.com/bbangert/toml包对toml文件进行解析

  1. // New 解析toml配置
  2. func New(tomlFile string) (*Config, error) {
  3. c := &Config{}
  4. if _, err := toml.DecodeFile(tomlFile, c); err != nil {
  5. return c, err
  6. }
  7. return c, nil
  8. }