golang常用代码片段--定制化config组件

· · 677 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  • 使用ini.v1配合fsnotify实现:
    1 解析ini配置文件
    2 监听配置文件的变化热更新配置
import (
    "github.com/fsnotify/fsnotify"
    "github.com/sirupsen/logrus"
    "gopkg.in/ini.v1"
    "io/ioutil"
)

var iniConf *ini.File

const confPath = "main.ini"

func init() {
    var err error
    iniConf, err = ini.Load(confPath)
    if err != nil {
        logrus.Panicf("load conf error: [%s]", err)
    }
    iniConf.BlockMode = false

    // 增加热更新能力
    watcher, err := fsnotify.NewWatcher()
    if err != nil {
        logrus.Panicf("new watcher error: [%s]", err)
    }
    go func() {
        for {
            select {
            case event := <-watcher.Events:
                if event.Op&fsnotify.Write == fsnotify.Write {
                    bytes, err := ioutil.ReadFile(confPath)
                    if err != nil {
                        logrus.Errorf("read conf error: [%s]", err)
                        break
                    }
                    logrus.Infof("modified conf file:%s", string(bytes))
                    newConf, err := ini.Load(confPath)
                    if err != nil {
                        logrus.Errorf("reload conf error: [%s]", err)
                        break
                    }
                    newConf.BlockMode = false
                    iniConf = newConf
                }
            case err := <-watcher.Errors:
                logrus.Errorf("watch conf file error: [%s]", err)
            }
        }
    }()
    if err := watcher.Add(confPath); err != nil {
        logrus.Panicf("add watcher file error: [%s]", err)
    }
}

func GetString(section, key, defaultValue string) string {
    return iniConf.Section(section).Key(key).MustString(defaultValue)
}

func GetInt(section, key string, defaultValue int) int {
    return iniConf.Section(section).Key(key).MustInt(defaultValue)
}

func GetInt64(section, key string, defaultValue int64) int64 {
    return iniConf.Section(section).Key(key).MustInt64(defaultValue)
}

func GetFloat64(section, key string, defaultValue float64) float64 {
    return iniConf.Section(section).Key(key).MustFloat64(defaultValue)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:

查看原文:golang常用代码片段--定制化config组件

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

677 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传