使用github.com/spf13/viper 插件可以轻松读取各类配置文件,还能动态监听配置文件的变化,甚至还能从远程配置系统中读取和监听修改
本文以yaml 以及json为例子简单说明下viper的使用
目录结构如下
image.png
yaml文件如下
app_name: "陈大肥的go应用"
log_level: "height"
redis:
host: "127.0.0.1"
port: "6379"
mysql:
host: "127.0.0.1"
post: "3306"
user: "jinanav"
password: "密码密码"
database: "test"
json文件如下
{
"app_name" : "陈大肥的go应用",
"log_level": "height",
"redis" : {
"host" : "127.0.0.1",
"port" : 6379
},
"mysql" : {
"host" : "192.168.0.133",
"user" : "jinanav",
"password" : "xxxxx",
"port" : 3306,
"database" : "test"
}
}
main.go如下
package main
import (
"fmt"
"log"
"github.com/spf13/viper"
)
func main() {
//设置要读取配置文件的名字
viper.SetConfigName("config")
//配置文件格式 yaml 也可以支持json等格式,按需设置
viper.SetConfigType("yaml")
//viper.SetConfigType("yaml")
//分割符 默认用. 这样子配置文件的完整名字为 config.yaml
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 host: ", viper.Get("mysql.host"))
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"))
}
因为本人喜欢go mod来对包进行管理,如果使用gopath的同学可以执行以下命令拉取依赖包
go get github.com/spf13/viper
执行命令
go mod init (你的应用目录名字)
打印yaml格式的配置文件
image.png
打印json格式的配置文件
image.png
利用viper就能轻松实现配置文件的读取啦