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重新加载配置,达到热更新效果!