Golang工具库viper的使用教程
作者:uccs
viper 是 go
项目中用来读取配置文件的库,支持读取 yaml
、toml
、json
、hcl
、env
等格式的配置文件
读取环境变量
viper
可以读取终端的环境变量
如果你用的是 zsh
在 ~/.zshrc
中设置,如果是 bash
在 ~/.bashrc
中设置
写环境变量时,等号两边不能有空格,否则会报错
export APP_DEBUG=true
写好后,记得 source
一下,或者重启终端
source ~/.zshrc
使用 viper.AutomaticEnv
将环境变量都读取到 viper
中
然后就可以使用 viper.GetBool("APP_DEBUG")
来获取环境变量了
func GetEnvInfo(env string) bool { viper.AutomaticEnv() return viper.GetBool(env) } app_debug := GetEnvInfo("APP_DEBUG") fmt.Println(app_debug) // true
读取本地的配置文件
新建一个 config-debug.yaml
文件,内容如下:
host: "127.0.0.1" port: 50051
然后使用 viper
读取,setConfigFile
填写的路径是相对于 main.go
的路径
使用 viper.ReadInConfig
来读取配置文件
viper.SetConfigFile("./config-debug.yaml") if err := viper.ReadInConfig(); err != nil { panic(err) } fmt.Println(viper.GetString("host")) // "127.0.0.1"
使用 viper.SetConfigName
来设置文件名,viper.SetConfigType
来设置文件类型,可以更灵活的读取配置文件
viper.SetConfigName
设置文件名,不需要带后缀viper.SetConfigType
设置文件类型viper.AddConfigPath
设置文件路径
viper.SetConfigName("config-debug") viper.SetConfigType("yaml") viper.AddConfigPath("./") if err := viper.ReadInConfig(); err != nil { panic(err) } fmt.Println(viper.GetString("host")) // "127.0.0.1"
将配置文件中的配置映射到结构体中
每次使用 viper.GetString
来获取配置文件中的配置,都会写很多重复的代码,可以将配置文件中的配置映射到结构体中
新建结构体,结构体的字段名要和配置文件中的字段名一致,使用 mapstructure
标签来映射
type Server struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` }
使用 viper.Unmarshal
将配置文件中的配置映射到结构体中
var server Server viper.SetConfigName("config-debug") viper.SetConfigType("yaml") viper.AddConfigPath("./") if err := viper.ReadInConfig(); err != nil { panic(err) } if err := viper.Unmarshal(&server); err != nil { panic(err) } fmt.Println(server.Host) // "127.0.0.1"
监听配置信息的变化
如果配置文件发生变化,viper
支持在运行时监听配置文件的变化
使用 viper.WatchConfig
来监听配置文件的变化,使用 viper.OnConfigChange
来监听配置文件的变化
onConfigChange
传入的参数是一个函数,函数的参数是 fsnotify.Event
,在函数中重新读取配置文件,然后将配置文件中的配置映射到结构体中
viper.OnConfigChange(func(e fsnotify.Event) { _ = viper.ReadInConfig() _ = viper.Unmarshal(&server) }) viper.WatchConfig()
到此这篇关于Golang工具库viper的使用教程的文章就介绍到这了,更多相关Golang viper内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!