Golang里解析TOML配置文件的方法
TOML简介

TOML的全称是Tom’s Obvious, Minimal Language,因为它的作者是 GitHub联合创始人Tom Preston-Werner 。TOML的目标是成为一个有明显语义而容易去阅读的最小化配置文件格式。 TOML被设计成可以无歧义地被映射为哈希表,从而很容易的被解析成各种语言中的数据结构。TOML一些规定如下:
TOML是大小写敏感的。
TOML文件必须只包含UTF-8编码的Unicode字符。
空格是指制表符(0x09) 或空格 (0x20)。
换行符是指LF(0x0A)或CRLF (0x0D0A).
#表示注释
详细说明请参考:https://github.com/toml-lang/toml
Golang解析TOML文件
toml文件范例
本文使用的"test.toml"文件例子如下:
#版本号 Version="1.0" #用户信息 [User] Name="test1" Age=18 IsVip=true #组信息 [[Group]] ID=1001 Name="group1" [[Group]] ID=1002 Name="group2"
Golang解析库
golang里解析toml文件的解析库也有很多的,今天这我使用的是“github.com/BurntSushi/toml”,安装方法:命令行或者终端下执行:
go get github.com/BurntSushi/toml
解析toml文件代码实例
根据上面的配置文件内容来定义Golang里的struct,,然后实现解析toml的方法,具体如下:
package main
import (
"fmt"
"path/filepath"
"github.com/BurntSushi/toml"
)
type Config struct {
Version string
User *User
Group []*Group
}
type User struct {
Name string
Age int
IsVip bool
}
type Group struct {
ID int
Name string
}
func ReadConf(filename string) (*Config, error) {
var (
conf *Config
err error
)
if _, err = toml.DecodeFile(filename, &conf); err != nil {
panic(err)
}
return conf, err
}
func main() {
var (
err error
conf *Config
filename string
)
filename, err = filepath.Abs("./test.toml")
if err != nil {
fmt.Println(err)
return
}
conf, err = ReadConf(filename)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(conf.Version)
fmt.Println(conf.User)
for _, v := range conf.Group {
fmt.Println(v)
}
}执行下输出结果为:
1.0
&{test1 18 true}
&{1001 group1}
&{1002 group2}