Go语言中加载配置文件之goconfig框架使用

每个项目中都会有配置文件管理来管理,比如数据库的配置。

配置文件框架 一般大致思路都是加载配置文件,返回配置操作对象,该对象提供获取配置api

下面我们来使用goconfig框架来了解配置框架,它解析的是ini文件,ini文件以简单的文字和结构组成,一般windows系统比较常见,很多应用程序也会因为其简单而使用其作为配置文件

官网star目前599

img_2.png

安装

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的使用就介绍到这里,大家赶紧用起来把!

欢迎关注,学习不迷路!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容