![bd7ad990b13540c9e14362bf9fa623cf.png](https://i-blog.csdnimg.cn/blog_migrate/a7b0e0f3a18d5d2b10bc683f1b5c2b48.jpeg)
Go 每日一库之 viper
简介
上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库。 viper 是一个配置解决方案,拥有丰富的特性:
- 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件;
- 可以设置监听配置文件的修改,修改时自动加载新的配置;
- 从环境变量、命令行选项和io.Reader中读取配置;
- 从远程配置系统中读取和监听修改,如 etcd/Consul;
- 代码逻辑中显示设置键值。
快速使用
安装:
$ go get github.com/spf13/viper复制代码
使用:
package mainimport ( "fmt" "log" "github.com/spf13/viper")func main() { viper.SetConfigName("config") viper.SetConfigType("toml") viper.AddConfigPath(".") viper.SetDefault("redis.port", 6381) err := viper.ReadInConfig() if err != nil { log.Fatal("read config failed: %v", err) } fmt.Println(viper.Get("app_name")) fmt.Println(viper.Get("log_level")) fmt.Println("mysql ip: ", viper.Get("mysql.ip")) fmt.Println("mysql port: ", viper.Get("mysql.port")) fmt.Println("mysql user: ", viper.Get("mysql.user")) fmt.Println("mysql password: ", viper.Get("mysql.password")) fmt.Println("mysql database: ", viper.Get("mysql.database")) fmt.Println("redis ip: ", viper.Get("redis.ip")) fmt.Println("redis port: ", viper.Get("redis.port"))}复制代码
我们使用之前Go 每日一库之 go-ini一文中使用的配置,不过改为 toml 格式。 toml 的语法很简单,快速入门请看learn X in Y minutes。
app_name = "awesome web"# possible values: DEBUG, INFO, WARNING, ERROR, FATALlog_level = "DEBUG"[mysql]ip = "127.0.0.1"port = 3306user = "dj"password = 123456database = "awesome"[redis]ip = "127.0.0.1"port = 7381复制代码
viper 的使用非常简单,它需要很少的设置。设置文件名(SetConfigName)、配置类型(SetConfigType)和搜索路径(AddConfigPath),然后调用ReadInConfig。 viper会自动根据类型来读取配置。使用时调用viper.Get方法获取键值。
编译、运行程序:
awesome webDEBUGmysql ip: 127.0.0.1mysql port: 3306mysql user: djmysql password: 123456mysql database: awesomeredis