golang模块viper读取配置文件

Posted angelyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

以上是关于golang模块viper读取配置文件的主要内容,如果未能解决你的问题,请参考以下文章

golang viper & hcl 配置文件问题

Golang的viper库

Viper--方便好用的Golang 配置库

使用viper 进行golang 应用的配置管理

golang的配置文件操作:viper

viper读取配置文件