Go语言中加载配置文件之Toml配置文件的使用

简单介绍

前一篇文章我们介绍了使用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还有一些其它的语法可以支持更加复杂的配置,可以自己去了解下。

欢迎关注,学习不迷路!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值