viper读取配置文件

hello,大家好,我是聪聪。


1. 介绍

Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:

  • 设置默认值
  • JSONTOMLYAMLHCLenvfileJava properties格式的配置文件读取配置信息
  • 实时监控和重新读取配置文件(可选)
  • 从环境变量中读取
  • 从远程配置系统(etcd或Consul)读取并监控配置变化
  • 从命令行参数读取配置
  • 从buffer读取配置
  • 显式配置值

Viper能够帮助我们执行以下操作:

  • 查找、加载和反序列化JSONTOMLYAMLHCLINIenvfileJava properties格式的配置文件。

  • 提供一种机制为你的不同配置选项设置默认值,进行灵活配置和发布配置。

  • 提供一种机制来通过命令行参数覆盖指定选项的值。

  • 提供别名系统,以便在不破坏现有代码的情况下轻松重命名参数。

  • 当用户提供了与默认值相同的命令行或配置文件时,可以很容易地分辨出它们之间的区别。

Viper能够按照下列优先级进行获取配置:

  • 显示调用Set设置值
  • 命令行参数(flag)
  • 环境变量
  • 配置文件
  • key/value存储
  • 默认值

2. 安装

go get github.com/spf13/viper

3. Viper使用介绍

3.1 设置默认值

Viper支持设置默认值,当我们无法从配置文件、环境变量、远程配置、命令行获取配置时,默认配置到是很有用的。

func main() {
   
  //设置各类key对应默认值
  //key 为string类型
  //value可接受interface{} 类型参数
	viper.SetDefault("rootPath", "rootPath default value")
	viper.SetDefault("defaultPort", 8000)
	viper.SetDefault("defaultConfig", map[string]string{
   
		"HttpMethod": "HttpMethod default value",
		"HttpUrl":    "HttpUrl default value",
	})
  //从viper中读取配置

	fmt.Println("rootPath value:", viper.Get("rootPath"))
	fmt.Println("defaultPort value:", viper.Get("defaultPort"))
	fmt.Println("defaultConfig:", viper.Get("defaultConfig"))
	fmt.Println("defaultConfig:", viper.GetStringMapString("defaultConfig"))
}

从Viper中读取配置key对应配置信息。打印信息如下:

rootPath value: rootPath default value
defaultPort value: 8000
defaultConfig: map[httpMethod:GET httpUrl:ccoder.cc]
defaultConfig: map[httpMethod:GET httpUrl:ccoder.cc]

3.2 读取配置文件

Viper读取配置文件时,需要指定告诉配置文件路径(或者读取配置方式)。同时Viper支持从JSONTOMLYAMLHCLenvfileJava properties格式的配置文件读取配置信息。同时支持搜索多个路径。

下面是一个从配置文件config.json 读取配置的案例。只用指定配置文件config预期出现的路径,无需指定特定的路径。

//在当前工作目录 . 中读取一个config的配置文件 未指定文件后缀.
func printFile() {
   
  //配置文件名称(无后缀扩展名),viper会自行解析文件后缀名.
  //若配置文件无后缀时则需要通过SetConfigType配置后水名
  viper.SetConfigName("config")
  //可以重复添加的搜索路径
	viper.AddConfigPath(".")

  //加载配置文件 捕获一下error:文件不存在情况。
	err := viper.ReadInConfig()
	if err != nil {
   
		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
   
			log.Println("config not exists")
		} else {
   
			log.Println("read config error")
		}
		log.Fatal
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值