Golang配置文件热加载
配置文件热加载实现的效果就是当你修改配置文件后,会把你修改后的配置重新加载到内存中,而不用重启程序 造成服务的短暂不可以用 。
Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。支持格式JSON, TOML, YAML, HCL等
package main
import(
"fmt"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
)
type Config struct {
Host string
Port int32
}
var Conf Config
func main() {
// 设置配置文件名 (不带扩展名)
viper.SetConfigName("config")
// 添加搜索路径 直接在工作目录中查找配置
viper.AddConfigPath(".")
// 读取配置数据
if err := viper.ReadInConfig(); err != nil {
fmt.Printf("read config failed: %v", err)
return
}
// 将配置解析到Conf变量
if err := viper.Unmarshal(Conf); err != nil {
fmt.Printf("unmarshal config failed: %v", err)
return
}
// 启动配置文件监听
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Printf("config has change: %v", e.Name)
if err := viper.Unmarshal(Conf); err != nil {
fmt.Printf("unmarshal config failed: %v", err)
return
}
})
}