每个项目中都会有配置文件管理来管理,比如数据库的配置。
配置文件框架 一般大致思路都是加载配置文件,返回配置操作对象,该对象提供获取配置api
下面我们来使用goconfig框架来了解配置框架,它解析的是ini文件,ini文件以简单的文字和结构组成,一般windows系统比较常见,很多应用程序也会因为其简单而使用其作为配置文件
官网star目前599
安装
go get github.com/Unknwon/goconfig
配置示例
在项目下建立一个文件 conf/conf_goconfig.ini 内容如下
[mysql]
host = 127.0.0.1
port = 3306
; 用户名
user = root
# 密码
password = root
db_name : blog
max_idle : 2
max_conn : 10
[array]
course = java,go,python
配置文件由一个个的 section 组成,section 下就是key = value或者key : value 这样的格式配置
如果没有 section 会放到 DEFAULT 默认section里面
注释使用 ;开头或者#开头
下面我们就来读取配置
加载、获取section、获取单个值、获取注释、获取数组、重新设置值、删除值,重新加载文件(会写一个for循环10次去重新加载配置,这期间修改配置,观察值是否改变)
编写go代码
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 {
panic(errors.New(fmt.Sprintf("file is not found %s", confPath)))
}
// 加载配置
config, err := goconfig.LoadConfigFile(confPath)
if err != nil {
log.Fatal("读取配置文件出错:", 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
Process finished with the exit code 0
从结果中可以看出,正确获取到了配置文件信息,并且可以通过 Reload重新加载配置,达到热更新效果!
goconfig的使用就介绍到这里,大家赶紧用起来把!
欢迎关注,学习不迷路!