Golang - viper读取配置文件【解析配置,热更新】

一、介绍

github.com/spf13/viper

Viper是一个方便Go语言应用程序处理配置信息的库,可以处理多种格式的配置。其支持的特性有:

  • 设置默认值
  • 从JSON、TOML、YAML、HCL和Java properties文件中读取配置数据
  • 可以监视配置文件的变动、重新读取配置文件【热更新配置文件】
  • 从环境变量中读取配置数据
  • 从远端配置系统中读取数据,并监视它们(比如etcd、Consul)
  • 从命令参数中读物配置
  • 从buffer中读取
  • 调用函数设置配置信息

监视配置文件,重新读取配置数据

package main

import (
    "fmt"
    "github.com/fsnotify/fsnotify"
    "github.com/spf13/viper"
)
viper:=viper.New()
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
  fmt.Println("Config file changed:", e.Name)
})

二、使用(读取json文件)

 

#文件路径  ./config/demo.json
{
  "appId": "123456789",
  "secret": "maple123456",
  "host": {
    "address": "localhost",
    "port": 5799
  }
}

 

package  main   
import (    
"fmt"
"github.com/spf13/viper
)
//定义config结构体 type Config struct { AppId string Secret string Host Host } //json中的嵌套对应结构体的嵌套 type Host struct { Address string Port int } func main() {   config := viper.New()   config.AddConfigPath("./config") //设置读取的文件路径
  config.SetConfigName("demo")    
//设置读取的文件名
  config.SetConfigType("json")    
//设置文件的类型  //配置读取   if err := config.ReadInConfig(); err != nil { panic(err) }   fmt.Println(config.GetString("appId")) fmt.Println(config.GetString("secret")) fmt.Println(config.GetString("host.address")) fmt.Println(config.GetString("host.port")) //直接反序列化为Struct var configjson Config if err :=config.Unmarshal(&configjson);err !=nil{ fmt.Println(err) } fmt.Println(configjson.Host) fmt.Println(configjson.AppId) fmt.Println(configjson.Secret) }
posted @ 2023-05-18 12:13  李若盛开  阅读(822)  评论(0)    收藏  举报