1.装置
go get github.com/spf13/viper2.根本应用及注意事项
config.toml文件,注意事项在程序正文中
appname = "user_web77"loglevel = "info"port = 8089[mysql]ip = "192.168.56.19"port = 3310user = "root"password = 123456database = "cmp"[redis]ip = "192.168.56.101"port = 6379[rabbitmq]ip = "192.168.56.101"port = 5991程序
package mainimport ( "fmt" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" "log" "time")type MysqlConfig struct{ Ip string //私有拜访 Port string User string Password string Database string}type RedisConfig struct{ Ip string Port string}type RabbitmqConfig struct{ Ip string Port string}type Config struct{ //Config对象和config.toml文件保持一致 AppName string LogLevel string Port string Mysql MysqlConfig //须要定义子类型对应的变量,如果不定义映射不胜利 Redis RedisConfig Rabbitmq RabbitmqConfig}func main() { viper.AutomaticEnv() //获取环境变量的值 viper.SetConfigName("config") //定义配置文件名称 viper.SetConfigType("toml") //定义格局 viper.AddConfigPath("./config/") //定义文件门路 viper.SetDefault("redis.port",6379) //设置默认值 viper.SetDefault("kafka.port",6856) err := viper.ReadInConfig() //读取 if err != nil { log.Fatalln("read config failed: %v",err) } viper.WatchConfig() //监听配置文件扭转 并且须要搁置在viper.ReadInConfig之后 viper.OnConfigChange(func(e fsnotify.Event) { //配置文件批改完后的回调函数 log.Printf("Config file:%s Op:%s\n", e.Name, e.Op) }) log.Println(viper.GetString("appname")) //以string格局获取 log.Println(viper.GetString("log_level")) log.Println(viper.GetString("port")) fmt.Println("mysql ip:",viper.GetString("mysql.ip")) fmt.Println("mysql port:",viper.GetString("mysql.port")) fmt.Println("kafka port:",viper.GetString("kafka.port")) fmt.Println("GOPATH: ", viper.Get("GOPATH")) time.Sleep(time.Second) var config Config viper.Unmarshal(&config) for { log.Println(config.LogLevel) //通过绑定到对象上不会实时更新 log.Println(config.AppName) log.Println(config.Mysql.Ip) fmt.Println("mysql ip:",viper.GetString("mysql.ip")) //能够更新 time.Sleep(time.Second * 5) }}3.后果
2021/08/03 14:31:25 info2021/08/03 14:31:25 user_web772021/08/03 14:31:25 192.168.56.138mysql ip: 192.168.56.1382021/08/03 14:31:28 Config file:C:\Users\admin\xiayuedu\golangdemo\config\config.toml Op:WRITE2021/08/03 14:31:28 Config file:C:\Users\admin\xiayuedu\golangdemo\config\config.toml Op:WRITE2021/08/03 14:31:30 info2021/08/03 14:31:30 user_web772021/08/03 14:31:30 192.168.56.138mysql ip: 192.168.56.192021/08/03 14:31:35 info2021/08/03 14:31:35 user_web772021/08/03 14:31:35 192.168.56.138mysql ip: 192.168.56.19