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}