Toml配置文件的使用

本文介绍了Toml配置文件的使用,包括其灵活的数据类型如整数、字符串、数组和布尔值,以及如何定义表格和表格数组。通过具体的例子展示了表格的声明和嵌套,同时提到了在Golang中解析Toml文件的方法。

原文链接:https://www.ahaoaha.top/2019/05/29/Toml配置文件的使用/

toml的使用

下载第三方库:go get github.com/BurntSushi/toml

toml的配置格式十分灵活,可以是整数(最小尺寸64位)、字符串(必须是utf-8编码)、数组、布尔值简单类型;也可以数组、map等复杂类型。

语法
表格

表格是键值对的集合,使用[]定义,一个表格的声明独占一行

[TABLE_NAME]

从一个表格声明开始,直到下一个表格或者文件EOF之前的内容都属于当前表格的键值对

KEY_NAME = VALUE
# 键值可以随意缩进
	KEY_NAME2 = VALUE2

嵌套表格的表格使用.标识

[TABLE_NAME.SUB_TABLE_NAME]
# SUB_TABLE_NAME表格丛属于TABLE_NAME表格
  • 例子

    [dao.base]
    type = "ahaoaha"
    # 对应的json
    # {"dao": { "base": {"type": "ahaoaha" } } }
    
表格数组

表格数组可以通过包裹在双中括号内的表格来表示,使用相同[[TABLE_NAME]]的表格是同一个数组的元素,表格按照书写的顺序插入,如果下方无键值对,则会被当作空表。

  • 例子

    [[TABLE_NAME]]
    name = "ahaoozhang"
    id = 1
    
    [[TABLE_NAME]]
    
    [[TABLE_NAME]]
    name = "gaoyuanyuan"
    gender = "woman"
    
    # 等价于下面的json
    {
    	"TABLE_NAME": [
    		{ "name": "ahaoozhang", id = "1" },
    		{ },
    		{ "name": "gaoyuanyuan", "gender": "woman" }
    	]
    }
    

表格数组也可以嵌套,只需要在子表格上使用双中括号语法,每一个子双中括号从属于最近定义的上方的表格

  • 例子

    [[fruit]]
    name = "balana"
    
    [fruit.physical]
    color = "yellow"
    shape = "round"
    
    [[fruit.variety]]
    name = "china"
    
    [[fruit.variety]]
    name = "USA"
    
    [[fruit]]
    name = "apple"
    
    [[fruit.variety]]
    name = "plantain"
    
    # 等价于下面的json结构
    {
    	"fruit": [
    		{
    			"name": "balana",
    			"physical": {
    				"color": "yellow",
    				"shape": "round"
    			},
    			"variety": [
    				{ "name": "china" },
    				{ "name": "USA"}
    			]
    		},
    		{
    			"name": "apple",
    			"variety": [
    				{ "name": "plantain"}
    			]
    		}
    	]
    }
    
例子
# 整个配置文件可以看作是一个结构体

# 全局数据,直接可以解析到
title = "标题"

# 每一个[]中括号类似一个结构体
[user]
name = "ahaoozhang"
id = 1

[database]
addr = "127.0.0.1"
port = [8000, 8001, 8002]
max_conn = 100

[servers]

# [servers]表示所属结构体,.后面的内容表示key值,val定义在下方
[servers.alpha]
ip = "10.1.1.1"
dc = "eqdc10"

[severs.beta]
ip = "10.0.0.0"
dc = "eqdc10"

[client]
data = [["gamma", "delta"], [1, 2]]
hosts = ["alpha", "omega"]

在golang代码中,需要根据toml文件定义出相应的结构体

type MyConfig struct { // 整个文件可以看作一个大的结构体
    Title string // 全局字段可以直接提取
    User UserInfo // 每个[]对应一个结构体
    DataBase DataBaseInfo
    Servers map[string]server
    Clients clients
}
//全局结构体中的成员名需要与各表格名相同

type UserInfo struct {
    Name string
    ID uint32
}

type DataBaseInfo struct {
    IP string
    Port uint64
    MaxConn uint32
}

type Server struct {
    IP string
    DC string
}

type Clients struct {
    Data [][]interface{}
    Hosts []string
}

func main() {
    if _, err := toml.DecodeFile(CONFIGFILEPATH, &config); err != nil {
        panic(err)
    }
    
    fmt.Printf("%v", config)
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值