在编写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