吾八哥博客

您现在的位置是:首页 > 码农手记 > Golang > 正文

Golang

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

吾八哥2018-07-05Golang9580

TOML简介

toml-200.png

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}