小李同学 keep digging deeper
Golang

TOML表格类型使用

— 字

用 BurntSushi/toml 读配置文件,先用 os.Stat 确认文件存在,再交给 DecodeFile 填进结构体。

import "github.com/BurntSushi/toml"

path := "./config/template.toml"
if _, err := os.Stat(path); err != nil {
	return nil, err
}

// 解析配置文件
cfg := Config{}
_, err := toml.DecodeFile(path, &cfg)

if err != nil {
	return nil, err
}

fmt.printLn(cfg)

数组表:[[stream]]

双中括号表示这里是一个数组,每写一次 [[stream]] 就往数组里追加一个元素。紧跟其后的 [stream.ffmpeg] 不是新元素,而是刚追加那个元素下面的子表。下面这份配置解析出来是两个元素,每个都带一个 ffmpeg 子表:

[[stream]]
a = 1
b = 2
c = "3"
[stream.ffmpeg]
acodec = "aac"
vcodec = "libx264"
font_size = 20

[[stream]]
a = 1
b = 2
c = "3"
[stream.ffmpeg]
acodec = "aac"
vcodec = "libx264"
font_size = 20

其他类型

一份把常见写法都用上的示例:

# 全局信息
title = "TOML示例"

# 应用信息
[app]
    author = "史布斯"
    organization = "Mafool"
    mark = "第一行\n第二行."            # 换行
    release = 2020-05-27T07:32:00Z   # 时间

# 数据库配置
[mysql]
    server = "192.168.1.1"
    ports = [ 8001, 8001, 8002 ]     # 数组
    connection_max = 5000
    enabled = true

# Redis主从                           # 字典对象
[redis]
    [redis.master]
        host = "10.0.0.1"
        port = 6379
    [redis.slave]
        host = "10.0.0.1"
        port = 6380

# 二维数组
[releases]
release = ["dev", "test", "stage", "prod"]
tags = [["dev", "stage", "prod"],[2.2, 2.1]]


# 公司信息                             #对象嵌套
[company]
    name = "xx科技"
[company.detail]
    type = "game"
    addr = "北京朝阳"
    icp = "030173"

对应到语法层面:

  • 字符串里的 \n 会解成真实换行;
  • 不带引号的 2020-05-27T07:32:00Z 是 TOML 原生的日期时间类型,不是字符串;
  • [ 8001, 8001, 8002 ] 是一维数组,[["dev", ...], [2.2, 2.1]] 是元素类型都不要求一致的二维数组;
  • [redis.master] 这种点号写法等价于在 [redis] 里再嵌一层表,和 [company.detail] 是同一种嵌套。

本文作者 小李同学,转载请注明出处。

评论

还没有人留言。

写一条

提交后会先进站主的待审列表,通过之后才公开。

搜索文章

输入关键词搜索文章。