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

被折叠的 条评论
为什么被折叠?



