go配置文件管理

您所在的位置:网站首页 viper简介 go配置文件管理

go配置文件管理

2023-10-08 07:45| 来源: 网络整理| 查看: 265

简介

github Viper是适用于Go应用程序的完整配置解决方案,它被用于设计再应用程序中工作,并且可以处理所有类型的配置需求和格式,它支持以下特性:

设置默认值从 JSON、TOML、YAML、HCL、envfile 和 Java properties配置文件读取实时观看和重新阅读配置文件(可选)从环境变量中读取从远程配置系统(etcd 或 Consul)读取,并监控配置变化从命令行标志读取配置从buffer读取配置显式配置值 快速开始

快速开始以YAML为例;YAML教程

YAML name: test redis: host: 127.0.0.1 port: 6379 go package main import ( "fmt" "github.com/spf13/viper" ) type RedisConfig struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` } type ServerConfig struct { Name string `mapstructure:"name"` RedisConfig RedisConfig `mapstructure:"redis"` } func main() { v := viper.New() // 路径必须要写相对路径,相对于项目的路径 v.SetConfigFile("viper/demo01/config.yaml") if err := v.ReadInConfig(); err != nil { panic(err) } // 单个取值 name := v.Get("name").(string) // 映射到结构体 var s ServerConfig if err := v.Unmarshal(&s);err != nil{ panic(err) } fmt.Println(s) fmt.Println(name) }

在这里插入图片描述

动态监控变化 package main import ( "fmt" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" "time" ) type RedisConfig struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` } type ServerConfig struct { Name string `mapstructure:"name"` RedisConfig RedisConfig `mapstructure:"redis"` } func main() { v := viper.New() // 路径必须要写相对路径,相对于项目的路径 v.SetConfigFile("viper/demo02/config.yaml") if err := v.ReadInConfig(); err != nil { panic(err) } // 映射到结构体 var s ServerConfig if err := v.Unmarshal(&s); err != nil { panic(err) } fmt.Println(s) // 监听配置文件变化 v.WatchConfig() v.OnConfigChange(func(in fsnotify.Event) { fmt.Printf("配置文件:%s发生改变\n", in.Name) if err := v.ReadInConfig(); err != nil { panic(err) } if err := v.Unmarshal(&s); err != nil { panic(err) } fmt.Println(s) }) // 睡眠30秒让函数不要马上结束;给修改文件留出时间 time.Sleep(30 * time.Second) }

在这里插入图片描述 修改完文件要按Ctrl+s保存,这样viper才能监听到文件的变化



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3