go-configor配置文件支持热加载

在编写go程序的时候我们加载配置有多中方式,比较常用的还是配置文件。我们需要配置文件能够热加载(当配置发生变化后)不用重新启动程序,就能够使配置生效。

我们采用的是开源的配置文件方式 https://github.com/jinzhu/configor

好,下面上货。

package config

import (
   "fmt"
   "github.com/jinzhu/configor"
   "time"
)

func init() {
   configFileName := "config.yml"
   //reload模式
   configor.New(&configor.Config{
      AutoReload:         true,
      AutoReloadInterval: time.Second,
      AutoReloadCallback: func(config interface{}) {
         //config变化后触发
         fmt.Printf("%v changed \r\n", config)
      },
   }).Load(&Config, configFileName)
   //无reload模式
   //configor.Load(&Config, configFileName)
   fmt.Printf("config: %#v\r\n", Config)
}

//配置类
var Config = struct {
   APPName string `default:"app name"`

   DB struct {
      Name     string
      User     string `default:"root"`
      Password string `required:"true" env:"DBPassword"`
      Port     uint   `default:"3306"`
   }

   Contacts []struct {
      Name  string
      Email string `required:"true"`
   }
}{}

在main函数中读取

package main

import (
   "fmt"
   "selfcommon/src/common/config"
   "time"
)

func main() {
   fmt.Println(config.Config.APPName)
   time.Sleep(time.Duration(6) * time.Second)
   fmt.Println(config.Config.APPName)
}

 

配置文件

appname: common

db:
  name:     test
  user:     root
  password: 123456
  port:     3306

contacts:
  - name: i test
    email: test@test.com
  - name: i test2
    email: test2@test.com

 

在运行期间我们修改配置文件

config: struct { APPName string "default:\"app name\""; DB struct { Name string; User string "default:\"root\""; Password string "required:\"true\" env:\"DBPassword\""; Port uint "default:\"3306\"" }; Contacts []struct { Name string; Email string "required:\"true\"" } }{APPName:"test", DB:struct { Name string; User string "default:\"root\""; Password string "required:\"true\" env:\"DBPassword\""; Port uint "default:\"3306\"" }{Name:"test", User:"root", Password:"123456", Port:0xcea}, Contacts:[]struct { Name string; Email string "required:\"true\"" }{struct { Name string; Email string "required:\"true\"" }{Name:"i test", Email:"test@test.com"}, struct { Name string; Email string "required:\"true\"" }{Name:"i test2", Email:"test2@test.com"}}}
test
&{testa {test root 123456 3306} [{i test test@test.com} {i test2 test2@test.com}]} changed 
testa

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值