zoukankan      html  css  js  c++  java
  • golang模块viper读取配置文件

    一、介绍

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

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

    简单的设置默认值

    viper.SetDefault("time", "2019-7-14")
    viper.SetDefault("notifyList", []string{"maple","ffm"})

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

    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)
    })

    二、读取config.json

    #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("./kafka_demo")
        config.SetConfigName("config")
        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)
    
    }
  • 相关阅读:
    HBase 超详细介绍
    写在之前
    【CF】38E Let's Go Rolling! (dp)
    [CF] E. Camels
    CF9D How many trees? (dp)
    [CF] 8C Looking for Order
    CF dp 题(1500-2000难度)
    NOIP原题板刷
    Codeforces Round #595 (Div. 3) 题解
    CSP-S2019 停课日记
  • 原文地址:https://www.cnblogs.com/angelyan/p/11185113.html
Copyright © 2011-2022 走看看