使用
json文件:config/user.json
{
"name":"xj",
"sex":"boy"
}
使用
package service
import (
"github.com/spf13/viper"
)
type User struct{
Name string `json:"name" `
Sex string `json:"sex" `
}
//初始化
func init(){
v := viper.New()
//第一种读取方式
v.SetConfigFile("config/user.json") //直接读取配置文件
//第二种读取方式
v.SetConfigName("user") //设置配置文件的名字
v.AddConfigPath("./config/") //添加配置文件所在的路径
v.SetConfigType("json") //设置配置文件类型,可选
//读取配置文件
errv := v.ReadInConfig() // 加载配置文件内容
//处理读取错误
if errv!=nil{
logs.Error("v read config error......%s",errv.Error())
}
//获取数据
name:=v.Get("name")
sex:=v.Get("sex")
fmt.Printf("name=%s\nsex=%s",name,sex)
//解析文件到结构体
userModel:=User{}
errByUnMarshal:=v.Unmarshal(&userModel)
//注释---start
errByUms := v.Unmarshal(&WebLogsConfig, func(config *mapstructure.DecoderConfig) {
//设置解析结构体对应的标签----默认是"mapstructure"
config.TagName = "json"//设置对应标签为"json"
})
//注释---end
if errByUnMarshal!=nil {
logs.Error("v Unmarshal config to struct error......%s",errByUnMarshal.Error())
}
fmt.Printf("name=%s\nsex=%s",userModel.Name,userModel.Sex)
//监听配置文件改变
//监听配置文件改变
v.WatchConfig()
v.OnConfigChange(func(in fsnotify.Event) {
//配置文件改变
errByRead := v.ReadInConfig()
if errByRead != nil {
logs.Error("package model,logs_config init() v read config error......%s", errByRead.Error())
}
errByUms := v.Unmarshal(&WebLogsConfig, func(config *mapstructure.DecoderConfig) {
//设置解析对应标签
config.TagName = "json"
})
if errByUms != nil {
logs.Error("package model,logs_config init() v unmarshal config to struct error......%s", errByUms.Error())
}
})