项目通常是有很多配置信息需要存储,比如数据库的账号密码、Redis的连接地址、各种环境参数,这些配置信息通常都是写在配置文件中。

我们常用的配置文件存储格式有JSON文件、INI文件、YAML文件和TOML文件等等。

这里介绍golang读写toml配置文件, 本教程主要通过BurntSushi/toml包读写toml配置文件。

1.toml介绍

TOML 的全称是 Tom’s Obvious, Minimal Language,因为它的作者是 GitHub 联合创始人 Tom Preston-Werner。

TOML 的目标是成为一个极简的配置文件格式。

toml配置文件例子:

# toml注释

title = "TOML Example"
level = 2

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00 # 注释可以写在这里

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

toml配置文件格式非常灵活,可以是数字、字符串、布尔等简单类型,也可以是数组、map等等复杂的类型。

2.安装包

go get github.com/BurntSushi/toml

3.读取toml配置文件

toml配置文件:config.toml

Age = 25
Cats = [ "Cauchy", "Plato" ]
Pi = 3.14
Perfection = [ 6, 28, 496, 8128 ]
DOB = 1987-07-05T05:45:00Z

golang读取配置文件,主要就是将toml配置映射到golang struct变量中。

读取toml配置文件的例子:

package main

import (
	"fmt"
	"github.com/BurntSushi/toml"
	"time"
)

// 我们先根据toml配置文件定义struct
// 他们的关系都是一一对应,toml配置文件定义的字段是什么类型,struct字段就是什么类型
type Config struct {
	Age int  
	Cats []string // 对应toml配置文件中的Cats数组
	Pi float64
	Perfection []int
	// 因为toml配置文件定义的是时间格式,可以转换成golang的time类型
	DOB time.Time 
}

func main() {
    // 首先初始化struct对象,用于保存配置文件信息
    var conf Config

    // 通过toml.DecodeFile将toml配置文件的内容,解析到struct对象
    if _, err := toml.DecodeFile("./config.toml", &conf); err != nil {
	   // handle error
	}

    // 可以通过conf读取配置
    fmt.Println(conf.Age)
}