简单介绍
前一篇文章我们介绍了使用ini作为配置文件的goconfig框架,因其结构简单,对于一些复杂的配置就没那么友好,今天我们来介绍toml文件
toml文件对大小写敏感,文件需要使用utf-8编码的Unicode文档
在toml以 # 作为注释,文件内容也是需要有一个 section 其下内容以 key = value 书写,key不能为空,但是可以是空引号,key可以用双引号也可以不用,value是字符串时需要用双引号引起来
不能多次定义同一个key
如果定义来一个值为 mysql.name = “name” 那么 就不能在定义 mysql = “xx”
toml的语法可以去官网看看 https://toml.io/cn/
下面我们来使用基于toml的框架 github.com/BurntSushi/toml star数达到4k
安装
go get github.com/BurntSushi/toml
以一个简单的配置来说明
编写配置文件
配置中数据库为多数据源,可以保存到map中 key为数据库名,value为数据库其它必须值(在go代码中封装成mysql结构体)
对象数组使用 [[]] 来表示
配置如下
# blog库
[mysql.blog]
# 数组写法
host = ["10.0.0.1", "10.0.0.2"]
port = 3306
user = "blog"
password = "blog@123"
maxIdle = 2
maxConn = 10
# log库
[mysql.log]
host = ["10.0.0.3", "10.0.0.4"]
port = 3306
user = "log"
password = "log@123"
maxIdle = 5
maxConn = 30
# 数组 0
[[course]]
name = "golang"
[[course.teacher]]
name = "juan"
age = 20
# 数组 1
[[course]]
name = "java"
[[course.teacher]]
name = "wendell"
age = 25
编写go程序
package main
import (
"fmt"
"github.com/BurntSushi/toml"
"os"
)
// Mysql 一个mysql库对于的结构体
type Mysql struct {
Host []string
Port int32
User string
Password string
MaxIdle int32
MaxConn int32
}
// Config 定义一个结构体接收toml所有配置
type Config struct {
Mysql map[string]Mysql
Course []map[string]any
}
// github.com/BurntSushi/toml
func main() {
path, _ := os.Getwd()
configPath := path + "/conf/conf_toml.toml"
config := &Config{Mysql: make(map[string]Mysql)}
_, err := toml.DecodeFile(configPath, config)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(config)
fmt.Println(config.Mysql["blog"])
fmt.Println(config.Mysql["blog"].Host)
fmt.Println(config.Mysql["blog"].User)
fmt.Println(config.Course[0]["name"])
fmt.Println(config.Course[0]["teacher"])
}
执行读取配置
观察结果,正确读取数据,配置文件信息映射到对象中,比goconfig更方便使用。
&{map[blog:{[10.0.0.1 10.0.0.2] 3306 blog blog@123 2 10} log:{[10.0.0.3 10.0.0.4] 3306 log log@123 5 30}] [map[name:golang teacher:[map[age:20 name:juan]]] map[name:java teacher:[map[age:25 name:wendell]]]]}
{[10.0.0.1 10.0.0.2] 3306 blog blog@123 2 10}
[10.0.0.1 10.0.0.2]
blog
golang
[map[age:20 name:juan]]
到这toml的简单使用就介绍完来,一般的配置已经足够了,当然toml还有一些其它的语法可以支持更加复杂的配置,可以自己去了解下。
欢迎关注,学习不迷路!