GoWeb——goconfig使用

文章介绍了Go语言的一个配置文件解析库goconfig,它用于读取类似WindowsINI格式的配置文件。通过示例展示了如何读取配置、获取section、值、注释,以及如何设置、删除值和实现配置的热更新。
摘要由CSDN通过智能技术生成

1、goconfig

goconfig 是一个易于使用,支持注释的 Go 语言配置文件解析器,该文件的书写格式和 Windows 下的 INI 文件一样。

配置文件由形为 [section] 的节构成,内部使用 name:value 或 name=value 这样的键值对;每行开头和尾部的空白符号都将被忽略;如果未指定任何节,则会默认放入名为 DEFAULT 的节当中;可以使用 “;” 或 “#” 来作为注释的开头,并可以放置于任意的单独一行中。

2、示例

2.1、配置文件

在项目下建立一个文件conf/conf_goconfig.ini

[mysql]
host = 127.0.0.1
port = 3306
; 用户名
use = root
# 密码
password = root
db_name : blog
max_idle : 2
max_conn : 10
[array]
cource = java,go,python

配置文件由一个个的 section 组成,section 下就是key = value或者key : value 这样的格式配置

如果没有 section 会放到 DEFAULT 默认section里面

注释使用 ;开头或者#开头

下面我们就来读取配置 加载、获取section、获取单个值、获取注释、获取数组、重新设置值、删除值,重新加载文件(会写一个for循环10次去重新加载配置,这期间修改配置,观察值是否改变)

2.2、代码

package main

import (
	"errors"
	"fmt"
	"github.com/Unknwon/goconfig"
	"log"
	"os"
	"time"
)

func main() {
	//获取工程目录
	currentPath, _ := os.Getwd()
	confPath := currentPath + "/conf/conf_goconfig.ini"

	_, err := os.Stat(confPath)
	if err != nil {
		log.Fatalln(errors.New(fmt.Sprintf("file is not found %s", confPath)))
	}

	//加载配置
	config, err := goconfig.LoadConfigFile(confPath)
	if err != nil {
		log.Fatalln("读取配置文件出错:", err)
	}

	//获取section
	mysqlConf, _ := config.GetSection("mysql")
	fmt.Println(mysqlConf)
	fmt.Println(mysqlConf["host"])

	//获取单个值
	user, _ := config.GetValue("mysql", "user")
	fmt.Println(user)

	//获取单个值并指定类型
	maxIdle, _ := config.Int("mysql", "max_idle")
	fmt.Println(maxIdle)

	//获取单个值,发生错误时返回默认值,没有默认值返回零值
	port := config.MustInt("mysql", "port", 3308)
	fmt.Println(port)

	//重新设置值
	config.SetValue("mysql", "port", "3307")
	port = config.MustInt("mysql", "port", 3308)
	fmt.Println(port)

	//删除值
	config.DeleteKey("mysql", "port")
	port = config.MustInt("mysql", "port", 3308)
	fmt.Println(port)

	//获取注释
	comments := config.GetKeyComments("mysql", "user")
	fmt.Println(comments)

	//获取数组,需要指定分隔符
	array := config.MustValueArray("array", "course", ",")
	fmt.Println(array)

	// 重新加载配置文件,一般对于web项目,改了配置文件希望能够即使生效而不需要重启应用,可以对外提供刷新配置api
	// 修改password 为 root123值观察值的变化
	for i := 0; i < 10; i++ {
		time.Sleep(time.Second * 3)
		_ = config.Reload()
		password, _ := config.GetValue("mysql", "password")
		fmt.Println(password)
	}
}
map[db_name:blog host:127.0.0.1 max_conn:10 max_idle:2 password:root port:3306 user:root]
127.0.0.1
root
2
3306
3307
3308
; 用户名
[java go python]
root
root
root
root123
root123
root123
root123
root123
root123
root123

从结果中可以看出,正确获取到了配置文件信息,并且可以通过 Reload重新加载配置,达到热更新效果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值